[英]C++ template method forward declaration
我的班級有點問題。 我有兩個類都使用模板方法,因此我必須把它放在標題中。 這是一個例子。 我希望它能在沒有“前向聲明不完整”問題的情況下正確編譯。 我明白什么是錯的,但我無法弄清楚如何糾正這個問題。 感謝大伙們。
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>();
}
}
你有循環依賴。 您不能聲明不完整類的對象。 您可以通過聲明指針或對不完整類的引用來解決此問題。
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.