我的班级有点问题。我有两个类都使用模板方法,因此我必须把它放在标题中。这是一个例子。我希望它能在没有“前向声明不完整”问题的情况下正确编译。我明白什么是错的,但我无法弄清楚如何纠正这个问题。谢谢你们。
class.h
class A;
class B;
class A
{
B *foo;
template <class T>
void func()
{
foo->fanc();
}
}
class B
{
A *foo;
void fanc();
template <class T>
void osef()
{
foo->func<int>();
}
}
答案 0 :(得分:3)
你有循环依赖。您不能声明不完整类的对象。您可以通过声明指针或对不完整类的引用来解决此问题。
class A
{
B* foo;
或
class A
{
B& foo;
在后一种情况下,您必须使用构造函数的成员初始化列表初始化引用。
如果您正在使用指针,那么您应该在定义incomplte类之后移动memeber函数的定义。
class A;
class B;
class A
{
B* foo;
template <class T>
void func();
};
class B
{
// ...
};
template <class T>
inline void A::func()
^^^^^^ // If you need to include the header in more than one source file.
{
foo->fanc();
}