我目前有一个创建对象的程序。我可以看到使用我所拥有的describe方法成功创建了该对象。我把这个对象放到一个列表中:
list<GameObject*> roomObjects5;
auto * obj1 = new GameObject(&o1name,&o1desc,&o1key);
roomObjects5.push_back(obj1);
我现在正尝试使用迭代器打印这个名为roomObjects 5的列表:
void print(const list<GameObject>& s) {
list<GameObject>::iterator i;
for( i = s.front(); i != s.end(); ++i)
cout << *i << " ";
cout << endl;
}
但是有错误
类'const gameObject'与之不兼容 class'list:迭代
和
二元运算符'&lt;&lt;'不能应用于表达式'ostream'和 '游戏对象'
当我跑步时,我得到错误:
错误:在'{'标记之前不允许使用函数定义 void print(const list&amp; s){ ^
mingw32-make.exe [3]: * [CMakeFiles / textadv.dir / main.cpp.obj]错误1 CMakeFiles \ textadv.dir \ build.make:61:目标配方 mingw32-make.exe [2]'CMakeFiles / textadv.dir / main.cpp.obj'失败: [CMakeFiles / textadv.dir / all]错误2 CMakeFiles \ Makefile2:66:食谱 目标'CMakeFiles / textadv.dir / all'失败mingw32-make.exe [1]: [CMakeFiles / textadv.dir / rule]错误2 CMakeFiles \ Makefile2:78:目标'CMakeFiles / textadv.dir / rule'的配方失败 mingw32-make.exe:* [textadv]错误2 Makefile:117:食谱 目标'textadv'失败
有人可以帮我吗?
更新:
> void print(const list<GameObject>& s) {
> list<GameObject *>::iterator i;
> for (i = s.front(); i != s.end(); ++i)
> cout << *(*i) << " ";
>
> cout << endl; }
我现在正在尝试这个,我收到了错误
类'const GameObject'与类不兼容 名单:迭代'
更新2:
我现在正在尝试这个:
void print(const list&amp; s){ list :: iterator i;
for(auto i = s.front(); i != s.end(); ++i)
cout << *(*i) << " ";
cout << endl;
}
并使用
获取错误i != s.end
行
'无法比较结构'
和
++i
GameObject类型的表达既不是数字也不是指针
和
*(*i)
'指针类型是必需的'
答案 0 :(得分:1)
根据list::front()
上的文档:
返回对列表容器中第一个元素的引用。
与成员list :: begin不同,它返回一个迭代器到同一个元素,这个函数返回一个直接引用。
在空容器上调用此函数会导致未定义的行为。
而不是使用front()
使用返回迭代器的begin()
。此外,
您正在传递const list<GameObject>&
,原始列表为list<GameObject*>
。您的功能无法接受您的列表。代码看起来像:
void print(const list<GameObject*>& s) {
for (auto i = s.begin(); i != s.end(); ++i)
cout << *(*i) << " ";
cout << endl;
}
更新:您似乎没有超载ostream& operator << (ostream& out, GameObject& gObj)
。你应该定义它:
ostream& operator << (ostream& out, GameObject& gObj){
out << gObj.(whatever you want to print out from GameObject);
return out;
}
更新2:
我已经制作了一个用于测试的虚拟代码,它运行正常:
#include <iostream>
#include <list>
using namespace std;
class Noob {
public:
int bad_data;
};
ostream& operator << (ostream& s, Noob& noob) {
s << noob.bad_data;
return s;
}
void print(const list<Noob*> list) {
for (auto i = list.begin(); i != list.end(); ++i)
cout << *(*i) << " ";
}
int main() {
list<Noob*> list;
for (int i = 0; i < 10; i++)
list.push_back(new Noob());
print(list);
return 0;
}
输出继电器:
0 0 0 0 0 0 0 0 0 0