-1
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):错误 C2668:“Complex::Complex”:对
重载函数 complex.h(15) 的模糊调用:可能是“Complex::Complex(float,float,float)”complex.h(12) : 或“复杂::复杂(无效)”

4

4 回答 4

4

这失败了,因为编译器无法知道您在编写时所指的两个不同函数中的哪一个

Complex c;

那叫

Complex();

或者

Complex(float,float,float);

三个默认值?

您可以通过删除Complex()构造函数来解决此问题,并让Complex(float,float,float)具有三个默认值的构造函数处理默认构造。

于 2015-05-30T19:37:13.263 回答
1

具有三个默认参数的构造函数与您的无参数构造函数冲突。

于 2015-05-30T19:36:44.293 回答
1

构造函数是模棱两可的。如果您不带参数构造,编译器无法理解您要调用的构造Complex函数:是否为默认构造函数

Complex();

或具有三个参数的构造函数全部默认:

Complex(float =10  , float = 20, float = 30);

如果你这样做,这两个构造函数都会匹配

Complex c;

或者

new Complex();
于 2015-05-30T19:36:44.697 回答
1

错误消息非常清楚地说明了这一点。

问题在于,因为所有 3 个参数都是默认的,编译器不知道如何推断您正在谈论的函数重载。

// default constructor, or 3 defaulted floats?
Complex a;
于 2015-05-30T19:36:50.547 回答