2012-11-06 95 views
6

可能重複:
Default constructor with empty brackets構造問題

這是我工作的代碼,我不明白它的發生在構造函數包OBJ2();上輸出只顯示值4(封裝OBJ1(4))和2(包OBJ3(2))

#include <iostream> 
using namespace std; 
class Package 
{ 
private: 
    int value; 
public: 
    Package() 
    { 
     cout<<"constructor #1"<<endl; 
     value = 7; cout << value << endl; 

    } 
    Package(int v) 
    { 
     cout<<"constructor #2"<<endl; 
     value = v; cout << value << endl; 

    } 
    ~Package() 
    { 
     cout<<"destructor"<<endl; 
     cout << value << endl; 
    } 
}; 

int main() 
{ 
    Package obj1(4); 
    Package obj2(); 
    Package obj3(2); 

} 

回答

4

Package obj2(); 

必須

Package obj2; 

更多信息

http://www.parashift.com/c++-faq/empty-parens-in-object-decl.html

,或者替代拿到這個(從谷歌緩存中,真正的網站已經關閉,並拿一粒鹽,它提出了好點,但盡力而爲讓他們聽起來不如他們):

http://webcache.googleusercontent.com/search?q=cache:http://yosefk.com/c%2B%2Bfqa/ctors.html#fqa-10.2

+0

我給出了原因,你給了修復! –

+0

調用默認構造函數時不需要'()' –

+1

@EmmanuelN它不僅僅是「不需要」,而是「不能使用」。 – hyde

8

這不聲明一個對象:

Package obj2(); 

相信與否,它聲明瞭一個返回Package對象的函數。它被稱爲「most vexing parse」。

4

如果您正在使用C++ 11,和要解決的「最令人頭痛的解析」的問題,可以更換

Package obj2(); 

Package obj2{}; 

這是的uniform initialization syntax C++ 11,其目的主要是爲了解決這個問題的一部分。