2013-07-21 67 views
2
#include<iostream> 
using namespace std; 
class abc{ 
    int a; 
    public: abc() { } //do nothing constructor 
      abc(int x=6){ a=x;} //constructor with default argument 
    }; 
main() 
    { 
     abc a; 
    .... 
    } 

我的問題是在這種情況下將調用哪個構造函數?請解釋當具有默認參數的構造函數存在時,C++構造函數中的歧義

+3

它將無法編譯,因爲它是不明確的調用 – billz

+2

它也將無法編譯,因爲main的聲明是無效的。你的編譯器應該告訴你這些事情。 – Mat

+1

在ide上測試這段代碼需要多長時間,比如ideone.com? http://ideone.com/6qcSNU – srikanta

回答

1

這不會編譯由於不確定性,你可以看到here

prog.cpp:8:7: warning: ISO C++ forbids declaration of ‘main’ with no type [-Wreturn-type] 
prog.cpp: In function ‘int main()’: 
prog.cpp:10:11: error: call of overloaded ‘abc()’ is ambiguous 
prog.cpp:10:11: note: candidates are: 
prog.cpp:6:12: note: abc::abc(int) 
prog.cpp:5:12: note: abc::abc() 
0

你正在構造函數的調用是不明確的。編譯器無法知道要調用哪個構造函數,因爲其中一個構造函數包含默認參數。

相反,嘗試刪除參數的默認值。

相關問題