昨晚写《C++ Primer Plus》第十章第六题的时候遇到了一个熟悉又陌生的error

1
call of overloaded Move::Move() is ambiguous

这个词应该是编译器发现在重载的时候程序中有二义性,我仔细看了下我写的程序,发现我在含有参数的构造函数的原型中添加了默认参数:

1
2
3
4
5
6
7
8
9
10
11
Move::Move(double a = 0, double b = 0)
{
x = a;
y = b;
}
Move::Move()
{
x = 0.0;
y = 0.0;
}

当调用Move::Move()的时候编译器会匹配最匹配的函数,因为默认参数的存在,使得函数原型Move::Move(double a = 0, double b = 0)Move::Move()都可以匹配,因此编译器就报错了,因为有了二义性。

另外这个例子里面也可以知道,

在类的成员函数中也可以调用其他的成员函数和使用构造函数创建本类的实例的。

该题目的代码传送门: Cpp-Primer-Plus/ch10/10_6 at master · PytLab/Cpp-Primer-Plus

Comments

2016-02-25