2011-05-27 100 views
2

我在文件board.H定义的类:问题的在C++类的定义

class Board 
{ 
private: 
    ... 

public: 
    ... 
}; 

和在另一个类中,我想有一个部件是一个指向Board对象:

#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 

我在做什么错?

+0

是您的板类定义在命名空间里? – Stormenet 2011-05-27 16:22:56

+0

你怎么调用GCC? – 2011-05-27 16:23:34

+3

我怀疑这个错误在于你所修剪代码的一部分。 – 2011-05-27 16:24:02

回答

7

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

因此,当您将“bear.H”包含到“board.H”中时,会处理“bear.H”文件并尝试包含“board.H”,但该文件已被处理,所以标头守卫“bear.H”的内容不会再包含内容。但是,“bear.H”在没有领先的“Board”类定义的情况下处理。

+0

你是对的,这是我的情况,我该如何解决它? – SIMEL 2011-05-27 16:27:01

+2

@Iiya Melamed我建议你为此提出一个新问题。但作为一个暗示 - 尽量不要依赖于“board.H”中类Bear的定义。例如,“熊*”不需要类“熊”的定义,而只需要像“熊类”这样的前向声明。那么你不需要包含“bear.H”标题。同样适用于“void f(Bear b);” (但不是“void f(Bear b){}”)和“Bear&”。 – 2011-05-27 16:28:28

+0

编译器指令。通过使用在以下地址找到的#ifndef,#define和#endif指令来包装您的类,编译器应该只尝试编译每个类一次:http://www.cprogramming.com/reference/preprocessor/ifndef.html – 2011-05-27 16:31:03

0

检查命名空间。 如果Board是在不同的命名空间比Bear,你需要在Bear.h补充:

using <namespace>:: Board;