当存在具有默认参数的构造函数时,c ++构造函数中的歧义

时间:2013-07-21 07:37:16

标签: c++ constructor

 #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;
    ....
  }

我的问题是在这种情况下将调用哪个构造函数?请解释

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

您对构造函数的调用是不明确的。编译器无法知道要调用哪个构造函数,因为您的构造函数之一包含默认参数。

相反,请尝试删除参数的默认值。