为什么我不能在 C++ 中一次初始化 3 个默认参数
why cant i initialize 3 default parameters at a time in c++
class Complex
{
private:
float rp, ip;
//const int a=10;
//static int b;
//static const int c = 50;
public:
Complex();
//Complex(float );
/*Complex(float,float);*/
Complex(float , float = 20, float = 30);
}
上面的代码工作正常,但是当我尝试使用 3 个默认参数时
class Complex
{
private:
float rp, ip;
//const int a=10;//static int b;//static const int c = 50;
public:
Complex();
//Complex(float );
/*Complex(float,float);*/
Complex(float =10 , float = 20, float = 30);
}
我收到以下错误 -
main.cpp(12): error C2668: 'Complex::Complex' : ambiguous call to
overloaded function
complex.h(15): could be 'Complex::Complex(float,float,float)'
complex.h(12): or 'Complex::Complex(void)'
具有三个默认参数的构造函数与您的无参数构造函数冲突。
构造函数不明确。如果您构造不带参数的Complex
,编译器无法理解您要调用的构造函数:它是否是默认构造函数
Complex();
或者三个参数的构造函数都默认:
Complex(float =10 , float = 20, float = 30);
如果你这样做,这两个构造函数都会匹配
Complex c;
或
new Complex();
错误信息说得很清楚。
问题是因为所有 3 个参数都是默认的,所以编译器不知道如何推断出您在谈论什么函数重载。
// default constructor, or 3 defaulted floats?
Complex a;
这会失败,因为编译器无法知道您在编写时指的是两个不同的函数中的哪一个
Complex c;
那个叫
Complex();
或
Complex(float,float,float);
使用三个默认值?
您可以通过删除 Complex()
构造函数来解决此问题,并让具有三个默认值的 Complex(float,float,float)
构造函数处理默认构造。
class Complex
{
private:
float rp, ip;
//const int a=10;
//static int b;
//static const int c = 50;
public:
Complex();
//Complex(float );
/*Complex(float,float);*/
Complex(float , float = 20, float = 30);
}
上面的代码工作正常,但是当我尝试使用 3 个默认参数时
class Complex
{
private:
float rp, ip;
//const int a=10;//static int b;//static const int c = 50;
public:
Complex();
//Complex(float );
/*Complex(float,float);*/
Complex(float =10 , float = 20, float = 30);
}
我收到以下错误 -
main.cpp(12): error C2668: 'Complex::Complex' : ambiguous call to
overloaded function complex.h(15): could be 'Complex::Complex(float,float,float)' complex.h(12): or 'Complex::Complex(void)'
具有三个默认参数的构造函数与您的无参数构造函数冲突。
构造函数不明确。如果您构造不带参数的Complex
,编译器无法理解您要调用的构造函数:它是否是默认构造函数
Complex();
或者三个参数的构造函数都默认:
Complex(float =10 , float = 20, float = 30);
如果你这样做,这两个构造函数都会匹配
Complex c;
或
new Complex();
错误信息说得很清楚。
问题是因为所有 3 个参数都是默认的,所以编译器不知道如何推断出您在谈论什么函数重载。
// default constructor, or 3 defaulted floats?
Complex a;
这会失败,因为编译器无法知道您在编写时指的是两个不同的函数中的哪一个
Complex c;
那个叫
Complex();
或
Complex(float,float,float);
使用三个默认值?
您可以通过删除 Complex()
构造函数来解决此问题,并让具有三个默认值的 Complex(float,float,float)
构造函数处理默认构造。