默认构造函数被误解为函数名称

Default constructor is misunderstood for function name

本文关键字:函数 误解 构造函数 默认      更新时间:2023-10-16

当我编译以下代码时

#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 ObjRoom1;更改为Room ObjRoom1();来修复它,但是当我这样做时,我得到了

请求在"objRoom1"中请求成员"显示",该成员属于非类类型"房间()"

这是因为编译器认为Room ObjRoom1()是名称为 ObjRoom1() 且返回类型为 Room 的函数声明。你能帮我准确修复这段代码吗?

Room(int value=8)设置value的默认值。 这意味着您可以在不指定值的情况下调用它,因此您可以像

Room foo;

Room()不带任何参数。 这意味着您可以像这样称呼它

Room foo;

编译器应该如何知道您在使用Room foo;时是要使用Room(int value=8)还是Room()? 它不能,所以你得到错误。

您有两个版本的构造函数 - 一个不带参数,另一个采用一个默认参数。根据定义,两者都是默认构造函数,编译器无法决定要调用哪一个。