2011-06-08 80 views
2

我有一個ResourcePtr<T>類模板和ResouceManager<T>模板。我想讓他們彼此交朋友。如果我做了以下,我得到一個編譯錯誤;我怎樣才能解決這個問題?模板互相好友

template<class T> 
class ResourcePtr 
{ 
    friend class ResourceManager<T>; 
}; 

template<class T> 
class ResourceManager 
{ 
    friend class ResourcePtr<T>; 
}; 

錯誤C2059:語法錯誤: '<'
錯誤C2238:意外的標記(一個或多個)之前 ';'

回答

6

像往常一樣相互的事情:在另一個的定義之前聲明一個。

template<class T> 
class ResourceManager; 

template<class T> 
class ResourcePtr 
{ 
    friend class ResourceManager<T>; 
}; 

template<class T> 
class ResourceManager 
{ 
    friend class ResourcePtr<T>; 
}; 
+0

謝謝!而不是正向聲明它,我做了'template 朋友類ResourceManager;'直接因爲它更短。 :D – 2011-06-08 10:03:44

+2

@Paul:它有不同的含義。 AProgra的方法只聲明'ResourceManager ** **與同樣的T **是朋友,你的方法聲明任何ResourceManager都是朋友。 – ybungalobill 2011-06-08 10:06:25

+0

@ybungalobill謝謝,我不知道。 – 2011-06-08 10:19:29