2011-05-27 97 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;