3

for ループは std::vector を反復処理し、コンテンツを入力する必要があります。

最初の for ループで、次のようなエラー メッセージが表示されます。

NO BINARY OPERATOR FOUND << 変換できません

vector<MyClass>classVector;
    for (vector<MyClass>::iterator i = classVector.begin();
                           i != classVector.end();
                           ++i)
            {
                cout << *i << endl;
            }

MyClass.h:

class MyClass{

private:

    string newTodayTaskString;

public:
    MyClass(string t) : newTodayTaskString (t){}

    ~MyClass(){}
};

この for ループは、文字列のベクトルを繰り返し処理し、完全に機能します。なんで?

vector<string>stringVector;
   for (vector<string>::iterator i = stringVector.begin(); 
                         i != stringVector.end(); 
                         ++i) 
            {
                cout<<*i<<endl;
            }
4

5 に答える 5

5

質問は反復とは関係ありません、それはあなたが書くことができるからです

std::string s = "Hello";
std::cout << s;

だがしかし

MyClass o("Hello");
std::cout << o;      

ostream の << 演算子を適切にオーバーロードする方法を参照してください。それを機能させるためにオーバーロードする方法についてoperator <<

于 2012-07-04T08:56:01.953 に答える
3

を直接呼び出せるようにするには、クラスのストリーム演算子をオーバーロードする必要がありますstd::cout::operator <<

次のように定義できます。

 std::ostream& operator << (std::ostream& stream, const MyClass& obj)
 {
    stream << obj.newTodayTaskString;
 }

この演算子をフレンドとして宣言して、クラスのプライベートメンバーにアクセスできるようにするか、クラスに印刷関数を提供して代わりに使用します。

于 2012-07-04T08:54:13.823 に答える
1

クラス自体ではなく、クラスのメンバーを印刷したいと思います。

例えば:

cout << (*i).Name << endl; 
于 2012-07-04T08:54:55.737 に答える
0

出力演算子をオーバーロードする必要があります。

#include <iostream>
#include <string>
#include <vector>
#include <iterator>

class MyClass{

private:
    std::string newTodayTaskString;

public:
    explicit MyClass(const std::string t) : newTodayTaskString (t){}
    std::ostream& print(std::ostream& os) const { return os << newTodayTaskString; }

    ~MyClass(){}
};

std::ostream& operator << (std::ostream& os, const MyClass& obj)
{
    return obj.print(os);
}

int main()
{
    std::vector<MyClass> vec = {MyClass("add"), MyClass("clear")};
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<MyClass>(std::cout, "\n"));
}
于 2012-07-04T08:58:04.603 に答える