C++ C+中的类定义存在问题+;

C++ C+中的类定义存在问题+;,c++,class,C++,Class,我在文件board.H中定义了一个类: class Board { private: ... public: ... }; 在另一个类中,我想要一个指向板对象的指针: #include "board.H" class Bear { private: Board* board; ... public: ... }; 当我尝试编译它时(在linux中使用g++),我得到以下错误: bear.H:15: error: ISO C++ forbids de

我在文件
board.H
中定义了一个类:

class Board
{
private:
    ...

public:
    ...
};
在另一个类中,我想要一个指向
对象的指针:

#include "board.H"

class Bear
{
private:
    Board* board;
    ...
public:
    ...
};
当我尝试编译它时(在linux中使用g++),我得到以下错误:

bear.H:15: error: ISO C++ forbids declaration of `Board' with no type
bear.H:15: error: expected `;' before '*' token

我做错了什么?

常见问题。您的“board.H”文件或“board.H”包含的文件中可能有一行
#include“bear.H”

因此,当您将“bear.H”包含到“board.H”中时,“bear.H”文件将被处理并尝试包含“board.H”,但该文件已被处理,因此“bear.H”的头保护将不再包含该内容。但是,处理“bear.H”时,没有一个前导的“Board”类定义

检查名称空间。 如果
Board
Bear
位于不同的命名空间中,则需要在Bear.h中添加:

using <namespace>:: Board;
使用::Board;

您的Board类定义是否在命名空间中?我怀疑错误在于您剪裁的代码部分。您是如何编译的?我看你的代码没有问题。@Iiya Melamed我建议你提出一个新问题。但作为一个提示,不要依赖于“board.H”中类Bear的定义。例如,“Bear*”不需要类“Bear”的定义,只需要像“class Bear;”这样的转发声明。那么就不需要包含“bear.H”标题。同样适用于“void f(Bear b);”(但不是“void f(Bear b){}”)和“Bear&.”编译器指令。通过使用在以下地址找到的#ifndef、#define、#endif指令包装类,编译器应该只尝试编译每个类一次:我喜欢这样的循环依赖性错误消息如此含糊不清。