【发布时间】:2012-08-30 03:55:05
【问题描述】:
我收到以下错误:
class Test
{
std::map<std::string,Test> test;
};
错误是“字段的类型'Test'不完整”。我读了一些帖子,建议这可能是 xcode 附带的 libcxx 版本中的一个错误,但如果我只需将其更改为:
class Test
{
std::map<std::string,std::shared_ptr<Test>> test;
};
我只是想再次确认这绝对是一个正确的错误,而不是一个错误。
干杯!
【问题讨论】:
-
为我工作,gcc 4.6.3 @ ubuntu x64
-
标准要求标准容器中使用的所有类型都是完整的,所以报错是有效的。但是,该库的一些实现也可以处理不完整的类型。
-
std::map<std::string,std::shared_ptr<Test>>和std::map<std::string,Test>在语义上非常不同!第一个存储(智能)指针,而第二个存储“整个”对象。 -
@avakar 解释了为什么代码在 VS 2012 下编译而不是 XCode..
-
@Joe : Boost.Variant 附带
boost::recursive_wrapper<>来正好解决这个问题。 :-]