2012-02-11 1 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 동작에서 어떤 결론을 도출해야하는지 조심해야합니다. –

관련 문제