2013-05-08 86 views
1

我的類有點問題。我有兩個類都使用模板方法,因此我必須把它放在標題中。這是一個例子。我希望它能在沒有「前向不完整」問題的情況下正確編譯。我明白什麼是錯,但我不知道如何解決這個問題。感謝你們。C++模板方法前向聲明

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>(); 
     } 
    } 

回答

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(); 
} 
+0

我使用指針,我只是忘了把它放在例子中。由於聲明不完整,我不能使用這些方法。 – user2362595 2013-05-08 14:09:00

+0

@ user2362595。查看編輯。 – stardust 2013-05-08 14:11:46

+0

非常感謝,我不知道關鍵字「內聯」。祝你今天愉快。 – user2362595 2013-05-08 14:20:37