2012-03-26 57 views

回答

-1

它可以有任何類型的朋友,但直到它的模板參數已經提供的模板是不是一個類型。所以一般來說,你必須爲每一個你想成爲朋友的完整類型專門化。這會推動你嘗試將類型作爲模板參數傳遞給好友,但是你不能提供一個模板類型。

for ex。這是非法的

template <class T> 
class A 
{ 
    friend class T; 
}; 

有了這些規定,它使得很難做任何意義完整的模板和親和力。

+0

無論如何要解決這個問題嗎? – slonkar 2012-03-26 00:53:28

+0

'friend T'在C++中是合法的11 – 2012-03-26 00:53:46

+0

由於編譯器已經被告知'T'是一個類型,因此語法只是'friend T;'。 – 2012-03-26 00:54:20

1

我知道這個帖子可能是死的,但對於已在此絆倒誰其他人......

templateClass1.h

template <class T> class templateClass2; // forward declare 

template <typename T> 
class templateClass1 { 
    friend templateClass2<T>; 
}; 

templateClass2.h

template <class T> class templateClass1; // forward declare 

template <typename T> 
class templateClass2 { 
    friend templateClass1; 
} 
+0

您錯過了templateClass2.h中第5行的'' – iBug 2017-05-06 15:49:46