2012-12-12 197 views
0

我已經在頭文件中聲明的類(.h)中,我在一個.cpp定義它的構造和功能(包括默認的構造)聲明對象

現在我想聲明一個對象在另一個頭文件中,並在另一個.cpp文件中初始化它。我需要這樣做,因爲對象的初始化取決於cpp中的一些變量。 在.h文件中聲明瞭這樣:

Saboteur *activeFault; /*Saboteur is the class, activeFault the object*/ 

當我嘗試編譯我的程序,我得到以下錯誤:

error C2143: syntax error : missing ';' before '*'.

任何線索,爲什麼出現這種情況?

提示:#includes都可以,最奇怪的是,當編譯器試圖編譯定義class Saboteur函數的.cpp文件時,出現錯誤,但它說錯誤在上面寫的這行(這是另一個cpp文件)。

+2

看起來像編譯器在處理這條線時還沒有看到'Saboteur'的定義。 –

回答

4

原型破壞者類。聲明:

class Saboteur; 

之前宣佈的activeFault

然後,在其他地方,您提供class Saboteur的完整定義。

+0

好的,謝謝,這有效,但爲什麼我必須原型呢?我的意思是,我在頭文件中包含頭文件開頭的類聲明,我不明白爲什麼我需要這樣做。 – Iban

+0

@Iban:如果你已經包含了一個聲明這個類的頭文件,那麼你不需要另一個聲明。但這聽起來像你沒有包括它。也許你有兩個標題都試圖包含對方? –

+0

@MikeSeymour有時候我會在從另一個.h文件複製的include-guard中絆倒,而在拷貝中更改werent。這可能會導致這樣的效果... –

0

有浮現在腦海

  1. 是否包含了破壞者的頭文件 產生這個問題.h文件很多想法?
  2. 這是一個模板類嗎?
  3. 也許標題 包含破壞者的文件實際上包含在 之前的破壞者類。在這種情況下添加您的其他.h文件:

    class Saboteur;