我正在编写一个包含2D矢量对象的程序:
class Obj{
public:
int x;
string y;
};
vector<Obj> a(100);
vector< vector<Obj> > b(10);
我在向量b中存储了一些向量a的值 .
当我尝试将其打印出来时出现错误:
for(int i=0; i<b.size(); i++){
for(int j=0; j<b[i].size(); j++)
cout << b[i][j];
cout << endl;
}
错误信息:
D:\ main.cpp:91:错误:'operator <<'不匹配(操作数类型为'std :: ostream '和'__gnu_cxx :: __ alloc_traits> :: value_type ')cout << b [i] [j]; ^
4 回答
也许就像下面
您的问题与向量无关,它与将某些用户定义类型
Obj
的对象发送到标准输出有关 . 使用operator<<将对象发送到输出流时,如下所示:流不知道如何处理它,因为没有12 overloads接受用户定义的类型
Obj
. 您需要为您的 classObj
重载operator<<
:甚至是
Obj
的矢量:有关该主题的更多信息,请查看此SO帖子:
What are the basic rules and idioms for operator overloading?
这与你的载体无关 .
您正在尝试打印
Obj
,但您没有告诉您的计算机您希望它如何执行此操作 .单独打印
b[i][j].x
和b[i][j].y
,或者Obj
重载operator<<
.没有
cout::operator<<
将class Obj
作为右手边 . 你可以定义一个 . 最简单的解决方案是分别将x
和y
发送到cout
. 但是使用基于范围的for循环!