编译以下代码时
#include<iostream>
using namespace std;
class Room
{
int length;
int width;
public:
void display()
{
cout << length << ' ' << width;
}
Room()
{
length = 0;
width = 0;
}
Room(int value = 8) : length(value), width(value)
{}
};
int main()
{
Room objRoom1;
objRoom1.display();
}
我收到错误
调用重载的'Room()'是不明确的
我尝试将Room ObjRoom1;
更改为Room ObjRoom1();
来修复它,但是当我这样做时,我得到了
请求'objRoom1'中的成员'display',这是非类型'Room()'
这是因为编译器认为Room ObjRoom1()
是名称为ObjRoom1()
的函数声明,返回类型为Room
。你能帮我解决一下这段代码的确切修复。
答案 0 :(得分:11)
Room(int value=8)
设置value
的默认值。这意味着您可以在不指定值的情况下调用它,因此您可以将其称为
Room foo;
Room()
不带参数。这意味着您可以像
Room foo;
当您使用Room(int value=8)
时,编译器应该如何知道您是否要使用Room()
或Room foo;
?它不能,所以你得到错误。
答案 1 :(得分:8)
你有两个版本的构造函数 - 一个不带参数,另一个带一个默认参数。根据定义,两者都是默认构造函数,编译器无法决定您要调用哪一个。