C++ 为什么我不能在c+;中一次初始化3个默认参数+;
上面的代码运行良好,但当我尝试使用3个默认参数时C++ 为什么我不能在c+;中一次初始化3个默认参数+;,c++,c++11,visual-c++-2012,C++,C++11,Visual C++ 2012,上面的代码运行良好,但当我尝试使用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 , float = 20, float = 30); } 我得到以下错误- main.
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);
}
我得到以下错误-
main.cpp(12):错误C2668:“Complex::Complex”:对重载函数 complex.h(15):可以是'complex::complex(float,float,float)' complex.h(12):或'complex::complex(void)'
具有三个默认参数的构造函数与无参数构造函数冲突 构造器模棱两可。如果您构造没有参数的
Complex
,编译器无法理解您要调用的构造函数:它是否是默认构造函数
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);
}
或三个参数均为默认值的构造函数:
Complex();
如果您这样做,这两个构造函数都会匹配
Complex(float =10 , float = 20, float = 30);
或
错误消息非常清楚地说明了这一点 问题是,因为所有3个参数都是默认参数,编译器不知道如何推断您所说的函数重载
new Complex();
这会失败,因为编译器无法知道您在编写时所指的两个不同函数中的哪一个
// default constructor, or 3 defaulted floats?
Complex a;
那叫什么
Complex c;
或
使用三个默认值
您可以通过删除
Complex()
构造函数来解决这个问题,并让Complex(float,float,float)
构造函数使用三个默认值来处理默认构造。您是否阅读了错误消息,或者只是假设它不可理解?错误消息似乎非常清楚。当你调用一个没有参数的构造函数时,编译器无法决定你指的是这两个构造函数中的哪一个。这与第一个参数初始化有什么关系呢@本杰明:当我尝试初始化第一个参数时,为什么它不编译。我无法从这个错误消息中得到答案
Complex c;
Complex();
Complex(float,float,float);