【发布时间】:2013-12-10 08:59:21
【问题描述】:
如果我有这样的标题:
#include <vector>
class Data;
class A {
// const Data& getData( int i ) const { return a[i]; }
std::vector<Data> a;
};
编译器正常编译它,因为它不需要知道一点数据类型。
通过引用重新调整值不依赖于类实现,因此不需要任何类内部知识。
但是当我取消注释访问器编译器开始抱怨invalid use of incomplete type 'class Data'。为什么?
【问题讨论】:
-
实际上,
std::vector<Data>确实需要完整的类型,即使代码可以编译。 -
在VS2013中,没有报错,你用的是什么编译器?
-
@juanchopanza 真的吗?
-
@LuchianGrigore 是的,很遗憾。这是boost containers 背后的动机之一。