【发布时间】:2023-03-20 09:02:01
【问题描述】:
我在chest.contents[0] 上收到编译错误structure required on left side of . or .*,但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是一个对象,但还是错了。 -
@chris:他使用的“结构”与编译器错误消息的含义相同,意思是“作为类类型实例的对象”。是的,这种说法是错误的。
-
这个错误是如此臭名昭著,以至于有一个标签......它被称为“最令人烦恼的解析”。
-
@BenVoigt,这很奇怪。我没有看到确切的错误,但我从未听说过称为结构的对象,除非它应该具有不同的含义。
-
@DietrichEpp:这与大多数令人烦恼的解析密切相关,但实际上并非如此。最令人头疼的解析是:
T t(S());其中S和T是类型,S()旨在构造一个临时对象以传递给转换构造函数。它比这更成问题,因为修复非常微妙,并且经常在代码清理工作中被删除。
标签: c++ compiler-errors most-vexing-parse