2010-05-22 34 views
1

我正在與這個任務:)作鬥爭在類中聲明對象時可能會導致此錯誤的原因是什麼?

我有兩個類:海洋和網格。

當我宣佈海洋內部網格的對象:

unsigned int sharkCount; 
Grid grid; 

編譯器/抱怨說:

error C2146: syntax error : missing ';' before identifier 'grid' 


你能可能預測哪些與產生此錯誤我提供的有限信息?

看來,好像海洋不喜歡網格類。這可能是因爲網格類的執行不力。順便說一句,網格有一個默認的構造函數。

然而,錯誤發生在編譯時間!

編輯:他們每個都在單獨的頭文件中,並且我已經在Ocean.h中包含了Grid.h。

+3

你是否也包含在Ocean.h通過Grid.h誤?這可能會導致問題。 – 2010-05-22 06:51:54

+0

@詹姆斯好吧,我不會再編程了,因爲我那樣做了:) 反正,這並不能解決我的問題。 編輯:其實它確實感謝詹姆斯。我會試着弄清楚爲什麼這個問題正在發生。 – m4design 2010-05-22 06:55:33

+0

發生這種情況是因爲它們包含的順序。請記住,在每個標題的頂部是一個* include guard *,它可以防止自己被包含兩次。否則,標題將會遞歸地永遠包含對方。 – rlbond 2010-05-22 07:11:28

回答

2

我的第一個猜測是Grid的定義在你試圖在Ocean中使用它的時候根本不可見。通常情況下,如果每個文件都在自己的文件中,並且沒有使用標題來允許每個文件被另一個文件「看到」,就會發生這種情況。

+0

我澄清說,在我的文章中,我確實包含了「海洋網格」的定義。謝謝 – m4design 2010-05-22 06:28:02

2

我們需要源的休息,但有幾個可能的答案:

  • 電網是由一些通過宏(#定義)重載
  • 網格類定義不被包括在內。
1

爲了電網與您其他類中使用你要麼需要在頭部網格的頁眉或做之類的預先聲明,並宣佈它作爲你的類的指針,然後對其進行實例化在你的.cpp文件中。

class Grid; 

class Ocean { 
    Grid* grid; 
}; 

或較好的是:

class Ocean { 
    boost::shared_ptr<Grid> grid; 
}; 
+1

我認爲它應該是'boost ::'not'boost:' – 2010-05-22 06:32:46

+0

oops,是的。編輯,謝謝 – 2010-05-22 07:08:29

相關問題