c++ - 的左侧预期的结构。或 .* 但它是一个结构

标签 c++ compiler-errors most-vexing-parse

我收到编译错误 structure required on left side of .或 .*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;
}

最佳答案

不,它不是,它是一个采用零参数的函数。

要默认初始化一个变量,使用

Chest chest;

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

Chest chest{};

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

boost::value_initialized<Chest> chest;

关于c++ - 的左侧预期的结构。或 .* 但它是一个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16680019/

相关文章:

c++ - 试图访问对象成员的段错误

c# - 将复杂结构从 C++ 编码到 C#

c++ - 非常量引用的无效初始化

c++ - 关于最令人烦恼的解析的一个令人困惑的细节

c++ - 如何设置 CMake 与 clang 交叉编译 Windows 上嵌入的 ARM?

c++ - 递归 boost::variant 类型不能用 "-std=c++11 -stdlib=libc++"编译

c++ - 为什么代码块显示错误?

java - 为什么我的错误被 Kapt 和 Kotlin 掩盖了?如何增加错误限制?

c++ - MSVC2013 和 MingW 之间的差异导致最令人烦恼的解析问题

c++ - 鞋面使用不正确?工作代码,直到我进入 toupper