A b(3)行产生歧义,因为它可以调用两个可能的构造函数中的任何一个.单个参数参数化构造函数或带有默认参数的双参数参数化构造函数.我该如何解决这个问题?
#include<iostream>
using namespace std;
class A
{
public:
int a,b;
A()
{
a=5;
b=6;
}
A(int a1)
{
a=a1;
b=54;
}
A(int a1,int b2=8)
{
a=a1;
b=b2;
}
void show()
{
cout<<"a="<<a<<" b="<<b<<endl;
}
};
int main()
{
A a(3); // I want A(int a1,int b2=8) to get executed
A b(3); // I want A(int a1) to get executed
a.show();
b.show();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
首先,回答这个问题:
当你写作时A a(4),你想a.b.成为:
选项a)54
class A
{
public:
int a,b;
A()
{
a=5;
b=6;
}
A(int a1,int b2 = 54)
{
a=a1;
b=b2;
}
};
Run Code Online (Sandbox Code Playgroud)
选项b)8
class A
{
public:
int a,b;
A()
{
a=5;
b=6;
}
A(int a1,int b2 = 8)
{
a=a1;
b=b2;
}
};
Run Code Online (Sandbox Code Playgroud)
错误是有原因的.如果你不知道你想从代码中得到什么,你怎么能期望编译器?
编辑:编辑后 - 不可能.不是那个确切的代码.