预计在左侧的结构.或.*但它是一种结构

Max*_*Max 3 c++ compiler-errors most-vexing-parse

我得到的编译错误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;
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 12

不,不是,它是一个零参数的函数.

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

Chest chest;
Run Code Online (Sandbox Code Playgroud)

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

Chest chest{};
Run Code Online (Sandbox Code Playgroud)

在C++ 03中,需要一个复杂的(因为许多编译器错误)解决方法,Boost库可以很容易地使用它:

boost::value_initialized<Chest> chest;
Run Code Online (Sandbox Code Playgroud)


Cap*_*ffe 6

Chest chest();
Run Code Online (Sandbox Code Playgroud)

不是你可能会相信的,是对构造函数的调用

Chest::Chest();
Run Code Online (Sandbox Code Playgroud)

而是一个函数的声明.创建你的正确方法chest

Chest chest;
Run Code Online (Sandbox Code Playgroud)

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

string s;
string s2("Hello");
Run Code Online (Sandbox Code Playgroud)