2012-02-11 60 views
1

下面的代碼片段在Visual Studio和g ++中都可以正常工作。多參數模板不能很好地與朋友聲明一起玩

template<typename T> class BST; 

template<typename T> 
class BSTNode 
{ 
    friend class BST<T>; 
... 

,而這個片段中正常工作在VS,但不是G ++

template<typename K, typename V> class Map; 

template<typename K, typename V> 
class MapPair 
{ 

    friend class Map<typename K, typename V>; 
    ... 

什麼是錯的代碼?我得到的錯誤是無益的,但在這裏他們是

error: wrong number of template arguments (1, should be 2) 
error: provided for ‘template<class K, class V> struct Map’ 
error: friend declaration does not name a class or function 

任何想法?

+3

從'K'和'V'之前刪除'typename'# – 2012-02-11 18:27:08

回答

1

friend class Map<K, V>;typename只能用於限定從屬名稱,而KV則不是。

+0

非常感謝。我現在感覺很傻。現在我只是想知道爲什麼VS沒有抱怨 – Kvothe 2012-02-11 19:18:06

+0

VS有模板處理的幾個「問題」,所以你必須小心,不幸的是你從VS行爲中得出什麼結論。 – 2012-02-11 19:19:10