C ++实例化一个类

时间:2013-03-08 18:33:02

标签: c++

#include <iostream>

class Base
{
    public:
        int id;
};

int main()
{
    Base b();
    b.id = 1; 
}

上面代码中的对象创建有什么问题? Base b()Base b之间有什么区别?

2 个答案:

答案 0 :(得分:2)

Base b();

被解析为名为b()的函数的函数声明,该函数返回Base个对象。你需要这个:

Base b;

这将实例化一个Base对象并调用其默认构造函数。请注意,这不会归零base::id。您可以通过提供执行此操作的默认构造函数来解决此问题:

class Base
{
    public:
        Base() : id(0) {}
        int id;
};

以相同的方式实例化:

Base b;

答案 1 :(得分:2)

问题是你实例化一个对象,而是声明一个函数。这样:

Base b(); // Function declaration! (not what you want)

声明一个函数b(),它返回一个Base类型的对象,不接受任何参数。因此,当您稍后尝试访问成员id时,编译器会发出错误,因为函数没有成员:

b.id = 1; // ERROR! b is a function, accessing member "id" makes no sense

如果您想要创建Base的实例,请删除括号:

Base b; // Object instantiation! (what you want)

请注意,在C ++ 11中,您可以使用统一初始化语法来创建类的实例,就像您尝试的那样,但使​​用大括号而不是括号:< / p>

Base b{}; // Object instantiation! (what you want, in C++11)