当我编译以下代码时:
#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();
以解决问题,但是这样做后我得到了以下错误:
请求非类类型‘Room()’的‘display’成员在‘objRoom1’中
这是因为编译器认为 Room ObjRoom1()
是一个名为 ObjRoom1()
的函数声明,并且返回类型为 Room
。你可以帮我精确定位并修复这段代码吗?
A a(A());
这样的情况,而不是简单的A a();
。从第一眼就可以看出后者是函数声明。在前者中很难看出函数声明。顺便说一下,维基百科也认同这一点:https://en.wikipedia.org/wiki/Most_vexing_parse - SergeyA