2013-01-04 55 views
0

什麼不對這個代碼:錯誤:X沒有指定類型

class C { 
    public: 
    int h(); 
}; 

C he;   //Fine 
he.h();  //Error: 'he' does not name a type 

int main() { 
    C me;   //Fine 
    me.h();   //Fine 
} 

使用MinGW的4.6.2。

注意:我只編譯,而不是鏈接。

+2

如果你可以在外面調用函數,爲什麼'main'存在? – Pubby

+0

編譯時出現的錯誤是編譯錯誤(a.k.a:錯誤,因爲您的代碼不符合語言規定的規則)。你在運行時得到的是運行時異常(a.k.a:你的代碼遵循語言規則,但在執行時會做錯事情)。 –

+0

我是爲什麼我可以做'詮釋我',但不能對班級做同樣的事情。我只是意識到我可以聲明一個類,而不是執行它的功能。 –

回答

5

在最上一級,每個C++翻譯單元必須由聲明

translation-unit: 
    declaration-seq[opt] 

declaration-seq: 
    declaration 
    declaration-seq declaration 

伯爾he.h();不是聲明。因此錯誤。

您可以引入一個虛擬變量來把它變成一個聲明

int dummy = he.h(); 

和代碼進行編譯。但原始版本是非法的。

6

在函數外面,只能放置聲明/定義。爲了執行像he.h();這樣的代碼,需要將代碼放入函數中。