我的程序如下:

class xxx{
       public: explicit xxx(int v){cout<<"explicit constructor called"<<endl;}
               xxx(int v,int n=0){cout<<"default constructor called"<<endl;}
  };
  int main(int argc, char *argv[])
  {
   xxx x1(20);    //should call the explicit constructor
   xxx x2(10,20); //should call the constructor with two variables
   return 0;
  }

编译时收到错误消息:-“重载的“xxx(int)”的调用不明确”

我知道编译器会发现两个构造函数签名相等,因为我默认情况下为0。

编译器有什么方法可以区别对待签名,并且程序可以成功编译?

最佳答案

您只需要一个构造函数

class xxx
{
public:
    explicit xxx(int v, int n=0)
    {
       cout << "default constructor called" << endl;
    }
};

然后,您可以初始化XXX个对象:
xxx x1(20);    //should call the explicit constructor
xxx x2(10,20); //should call the construct

关于c++ - 创建对象时模棱两可的构造函数调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18356150/

10-15 15:35