2015-09-09 85 views
0

我正在編寫一些仿真軟件,用C++編寫。目前,當試圖構建我的代碼時,我收到了9個編譯錯誤,都抱怨我剛剛添加的三行代碼。這些線是聲明中PublisherModule.hC++編譯錯誤C4430,C2653,C2146,C2143

class PublisherModule : 
    public s::Module, 
    public s::Singleton<PublisherModule>, 
    public s::Interface, 
    public s::htmlPage{ 

    public: 
     ... 
     Types::ModeRecord; 
     ModeRecord modeData; 
     ModeRecord *modeDataPtr; 
    ... 
}; 

之所以加入這些聲明到PublisherModule.h是這樣我可以添加以下代碼到PublisherModule.cpp文件的publish()功能:

Types::ModeRecord ModeData; 
Types::ModeStatusRecord *ModeDataPtr = &ModeData; 
DataStore->getModeData(*ModeDataPtr); 

publish()功能現在看起來像這樣:

void PublisherModule::publishData(void){ 
    ... 
    Types::ModeRecord ModeData; 
    Types::ModeStatusRecord *ModeDataPtr = &ModeData; 
    DataStore->getModeData(*ModeDataPtr); 
    ... 
} 

錯誤編譯器是給我的是:

error C2653: 'Types': is not a class or namespace name

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

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

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

我拿到總error C4430 4次,而其他錯誤都各一次。他們都在抱怨我添加到.h文件中的行。有谷歌的第一個錯誤,並在SO:Compiler error C2653: not a class or namespace name遇到這個答案,它會出現,原因是在頭文件中的循環依賴... ...

但是,這不是在這裏發生,只要我可以告訴......有什麼其他的原因,我可能會得到這個編譯錯誤,什麼阻止了我的代碼建立?

當我將鼠標懸停我的光標移到我在.h文件已經添加了第一行顯示的信息,Types::ModeRecord是:

Error: a class-qualified name is required

+0

源代碼中的哪一行會得到錯誤消息'error C2653:'SIFFTypes':不是類或名稱空間名稱? – wimh

+0

對不起,現在我的問題有錯字。它是'.h'文件中的'Types :: ModeRecord;'之上的行。該特定行實際上只是一個評論 - 它上面沒有可執行代碼。 – someone2088

回答

3

這裏是你發佈的代碼的縮寫版本,以我的觀察:

class PublisherModule [... bunch of base classes...] 
{ 

public: 
    Types::ModeRecord; 
}; 

您認爲這條線怎麼辦?
Types::ModeRecord;

它是形式[TypeName] [VariableName];(例如int i;
它並不像的方法的原型不(例如void foo(int i);
它不是一個typedef。
它看起來不像任何普通的C++。

你怎麼認爲它是幹什麼的?

+0

對不起,這是一個錯字,在複製和粘貼代碼時一定錯過了它。現在修改。 – someone2088

+0

看起來他似乎正在嘗試使用'using'語句,這將解釋正下方的'ModeRecord'的兩種用法... – jaggedSpire