我想制作一个海战游戏。我有两个类: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/

10-13 02:58