zal*_*loo 5 c++ compiler-errors
我在网格的默认构造函数的前两行收到编译器错误“错误:墙不是网格的成员”。我不知道为什么它这么说,因为我在头文件中定义了墙和网格!我也尝试过使用 this->wall、Grid::wall 和初始化列表。这是代码:
\n\nGrid::Grid() {\n this->wall = Species("wall");\n this->empty = Species("empty");\n Grid::turn_number = 0;\n int a,b;\n for(a= 0; a < 100; a++)\n for(b = 0; b< 100; b++) {\n Creature empty_creature = Creature(Grid::empty,a,b,NORTH,this);\n ((Grid::map)[a][b]) = empty_creature;\n }\n Grid::width = 0;\n Grid::height = 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当我更改默认构造函数以使用初始化列表时,我收到相同的错误:
\n\nGrid::Grid()\n: width(0), height(0), turn_number(0), wall("wall"), empty("empty"){\n int a,b;\n for(a= 0; a < 100; a++)\n for(b = 0; b< 100; b++) {\n Creature empty_creature = Creature(Grid::empty,a,b,NORTH,this);\n ((Grid::map)[a][b]) = empty_creature;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在头文件中:
\n\nclass Grid {\nprotected:\n Creature map[100][100];\n int width,height;\n int turn_number;\n Species empty;\n Species wall;\npublic:\n Grid();\n Grid(int _width, int _height);\n void addCreature(Species &_species, int x, int y, Direction orientation);\n void addWall(int x, int y);\n void takeTurn();\n void infect(int x, int y, Direction orientation, Species &_species);\n void hop(int x, int y, Direction orientation);\n bool ifWall(int x, int y, Direction orientation);\n bool ifEnemy(int x, int y, Direction orientation, Species &_species);\n bool ifEmpty(int x, int y, Direction orientation);\n void print();\n};\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的其余编译器错误(在评论中询问)。抱歉,格式错误,我的计算机由于某种原因输出奇怪的字符。
\n\nDarwin.c++: In constructor \xc3\xa2\xe2\x82\xac\xcb\x9cGrid::Grid()\xc3\xa2\xe2\x82\xac\xe2\x84\xa2:\nDarwin.c++:8:40: error: class \xc3\xa2\xe2\x82\xac\xcb\x9cGrid\xc3\xa2\xe2\x82\xac\xe2\x84\xa2 does not have any field named \xc3\xa2\xe2\x82\xac\xcb\x9cwall\xc3\xa2\xe2\x82\xac\xe2\x84\xa2\nDarwin.c++:8:54: error: class \xc3\xa2\xe2\x82\xac\xcb\x9cGrid\xc3\xa2\xe2\x82\xac\xe2\x84\xa2 does not have any field named \xc3\xa2\xe2\x82\xac\xcb\x9cempty\xc3\xa2\xe2\x82\xac\xe2\x84\xa2\nDarwin.c++:12:39: error: \xc3\xa2\xe2\x82\xac\xcb\x9cempty\xc3\xa2\xe2\x82\xac\xe2\x84\xa2 is not a member of \xc3\xa2\xe2\x82\xac\xcb\x9cGrid\xc3\xa2\xe2\x82\xac\xe2\x84\xa2\nDarwin.c++: In constructor \xc3\xa2\xe2\x82\xac\xcb\x9cGrid::Grid(int, int)\xc3\xa2\xe2\x82\xac\xe2\x84\xa2:\nDarwin.c++:17:86: error: class \xc3\xa2\xe2\x82\xac\xcb\x9cGrid\xc3\xa2\xe2\x82\xac\xe2\x84\xa2 does not have any field named \xc3\xa2\xe2\x82\xac\xcb\x9cwall\xc3\xa2\xe2\x82\xac\xe2\x84\xa2\nDarwin.c++:17:99: error: class \xc3\xa2\xe2\x82\xac\xcb\x9cGrid\xc3\xa2\xe2\x82\xac\xe2\x84\xa2 does not have any field named \xc3\xa2\xe2\x82\xac\xcb\x9cempty\xc3\xa2\xe2\x82\xac\xe2\x84\xa2\nDarwin.c++:21:39: error: \xc3\xa2\xe2\x82\xac\xcb\x9cempty\xc3\xa2\xe2\x82\xac\xe2\x84\xa2 is not a member of \xc3\xa2\xe2\x82\xac\xcb\x9cGrid\xc3\xa2\xe2\x82\xac\xe2\x84\xa2\nDarwin.c++: In member function \xc3\xa2\xe2\x82\xac\xcb\x9cvoid Grid::addWall(int, int)\xc3\xa2\xe2\x82\xac\xe2\x84\xa2:\nDarwin.c++:32:31: error: \xc3\xa2\xe2\x82\xac\xcb\x9cwall\xc3\xa2\xe2\x82\xac\xe2\x84\xa2 is not a member of \xc3\xa2\xe2\x82\xac\xcb\x9cGrid\xc3\xa2\xe2\x82\xac\xe2\x84\xa2\nDarwin.h:35:10: error: field \xc3\xa2\xe2\x82\xac\xcb\x9cempty\xc3\xa2\xe2\x82\xac\xe2\x84\xa2 has incomplete type\nDarwin.h:36:10: error: field \xc3\xa2\xe2\x82\xac\xcb\x9cwall\xc3\xa2\xe2\x82\xac\xe2\x84\xa2 has incomplete type\nIn file included from RunDarwin.c++:33:0:\nDarwin.h:35:10: error: field \xc3\xa2\xe2\x82\xac\xcb\x9cempty\xc3\xa2\xe2\x82\xac\xe2\x84\xa2 has incomplete type\nDarwin.h:36:10: error: field \xc3\xa2\xe2\x82\xac\xcb\x9cwall\xc3\xa2\xe2\x82\xac\xe2\x84\xa2 has incomplete type\nRun Code Online (Sandbox Code Playgroud)\n
“具有不完整的类型”意味着您尚未向编译器提供Species. 如果没有定义,最多只能有指向数据的指针,因为编译器不知道要保留多少空间。因此它会给出一个错误,然后忽略该行并尝试理解程序的其余部分。当然,由于该行被忽略,稍后尝试使用它将会失败。
请注意,您的编辑器已按文件名对错误进行排序,而不是向您显示它们实际发生的顺序。以后按顺序看编译器输出。
Species通过在before中添加定义(或 #include),这一切都可以轻松解决class Grid。
| 归档时间: |
|
| 查看次数: |
9492 次 |
| 最近记录: |