我想制作一个海战游戏。我有两个类:Ship 和 Cell。
#pragma once
#include"stdafx.h"
#include"Globals.h"
#include<vector>
#include"MCell.h"
class Ship
{
private:
int lenght;
int oriantation;
vector<Cell*> cells;
vector<Cell*> aroundCells;
...
#pragma once
#include<vector>
#include"MShip.h"
class Cell
{
private:
bool haveShip;
bool selected;
bool around;
int x;
int y;
Ship* ship;
我有很多这样的错误:
1>projects\seewar\seewar\mship.h(13): error C2065: 'Cell' : undeclared identifier
1>projects\seewar\seewar\mship.h(13): error C2059: syntax error : '>'
1>projects\seewar\seewar\mship.h(14): error C2065: 'Cell' : undeclared identifier
代码有什么问题?
最佳答案
那么您的问题在于,当您包含 MCell.h 时,您包含了引用 MCell.h 中定义的 Cell 的 MShip.h。然而,MShip.h 指的是 MCell.h,由于 pragma once 不会被包含在内。如果 pragma 曾经不存在,那么您将得到一个无限循环,该循环会使您的编译器堆栈溢出......
相反,您可以使用前向声明。
即从 MShip.h 中删除 #include "MCell.h"并简单地将其替换为 "class Cell;"您所有的循环引用问题都会消失:)
关于C++ 未声明的标识符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9439181/