对象创建时模糊的构造函数调用

时间:2013-08-21 11:26:24

标签: c++ constructor

我的计划如下:

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'创建了一个参数。

有没有什么方法可以让编译器对签名进行不同处理,程序会成功编译?

2 个答案:

答案 0 :(得分:2)

你只需要一个构造函数

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

答案 1 :(得分:2)

您有两个选择:

删除其中一个构造函数:

class xxx
{
public:
    explicit xxx(int v, int n = 0); // don't forget explicit here
};

删除默认参数:

class xxx
{
public:
    explicit xxx(int v);
    xxx(int v,int n);
};

无论哪种方式,main()中的代码都可以使用。选择是你的(主要是主观品味)。