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

时间:2013-05-21 21:45:17

标签: 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;
}

2 个答案:

答案 0 :(得分:12)

不,不是,这是一个零参数的函数。

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

Chest chest;

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

Chest chest{};

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

boost::value_initialized<Chest> chest;

答案 1 :(得分:6)

Chest chest();

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

Chest::Chest();

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

Chest chest;

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

string s;
string s2("Hello");