3

我收到编译错误structure required on left side of . or .*chest.contents[0]chest它是一个结构:

class Item {
public:
    int id;
    int dmg;
};

class Chest {
public:
    Item contents[10];
};

int main() 
{
    Chest chest();

    Item item = chest.contents[0];

    return 0;
}
4

2 回答 2

12

不,不是,它是一个接受零参数的函数。

要默认初始化变量,请使用

Chest chest;

在 C++11 中,此语法可用于值初始化。

Chest chest{};

在 C++03 中,这需要一个复杂的(由于许多编译器错误)解决方法,幸好 Boost 库使它易于使用:

boost::value_initialized<Chest> chest;
于 2013-05-21T21:46:51.570 回答
6
Chest chest();

不像你想象的那样,调用构造函数

Chest::Chest();

而是函数的声明。创建你的正确方法chest

Chest chest;

只有当您定义了带参数的构造函数时,您才应该使用括号。

string s;
string s2("Hello");
于 2013-05-21T21:48:14.750 回答