2013-04-01 141 views
1

下面的代碼編譯。但是如果我使用編寫代碼來調用方法test,它會給我一個編譯錯誤。這裏真正發生了什麼。這個語法的含義是什麼

#include <iostream>  

using namespace std; 

class A { 
public: 
    void test() { 
    cout << "working" << endl; 
    } 
}; 

int main() { 
    A foo; 
    A jar(); 
} 
+2

這不是一個變量聲明。 – chris

+3

http://en.wikipedia.org/wiki/Most_vexing_parse – Pubby

回答

7
A jar(); 

聲明瞭一個名爲jar不帶任何參數的功能,並返回類型爲A類的對象。

你不能聲明函數內部main,因此,你得到了錯誤。

+2

它不是真正的MVP('SomeType var(SomeClass());'),但足夠接近。你可以聲明這個函數,但是你不能像對象一樣使用它。 – chris

1

如果你想聲明一個名爲函數指針ptr你應該聲明它像:

A (*ptr)(void);