2012-02-11 7 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'を削除してください –

答えて

1

セイfriend class Map<K, V>;typenameは、従属名の修飾にのみ使用できます。KVは含まれていません。

+0

ありがとうございました。今はかなり愚かな気がする。 VSがなぜ文句を言っていないのか不思議です。 – Kvothe

+0

VSにはテンプレート処理に関するいくつかの「問題」がありますので、残念なことにVSの動作からどのような結論を導き出すか注意する必要があります。 –

関連する問題