尽管类型说明符已完成,但字段的类型不完整

时间:2018-07-15 07:23:42

标签: c++ templates typedef incomplete-type

我有一个像这样的程序:

git clone git://github.com/facebook/facebook-ios-sdk.git

运行以下代码时,尝试在类A中初始化变量member_时收到错误#include <iostream> template <typename T> class B; template <typename T> class A{ public: typedef typename B<T>::member_type member_type; member_type member_; // ERROR: Field has incomplete type 'A<int>::member_type' (aka 'C<A<int> >') A(member_type member): member_(member) {}; }; template <typename T> class B{ public: template <typename U> class C{ public: typedef typename U::value_type value_type; typedef U* pointer_type; pointer_type ptr_; C(pointer_type ptr): ptr_(ptr) {}; }; typedef C<A<T>> member_type; member_type member_; B(T* member): member_(C(member)) {}; }; int main(int argc, const char * argv[]) { B<int> b(nullptr); } 。我想知道这到底是什么意思吗?

该类型实际上是完整的,我希望成员为Field has incomplete type 'A<int>::member_type' (aka 'C<A<int> >')类型。

有人可以解释为什么发生以下错误吗?它与循环引用或模板实例化中的某些错误有关?

编辑

我认为这可能与尝试在类型C<A<int>>的对象内使用类型C<A<int>>的成员变量有关,这可能会导致某种递归情况。这是正确的吗?

0 个答案:

没有答案