我有一个像这样的程序:
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>>
的成员变量有关,这可能会导致某种递归情况。这是正确的吗?