以下代碼不起作用,因爲t
成員函數無法訪問其參數對象的屬性。訪問模板類的受保護屬性
如何聲明模板類A的模板方法t作爲A的朋友函數?
對於沒有模板的代碼,不需要聲明朋友。
代碼:
template <typename T>
class A{
protected:
T a;
public:
A(int i){
a = i;
}
template <typename T1>
void t(const A<T1> & Bb){
a = Bb.a;
}
};
int main(void){
A<int> Aa(5);
A<float> Bb(0);
Aa.t(Bb);
}
編譯器錯誤(ICC TEST.CPP):
test.cpp(11): error #308: member "A<T>::a [with T=float]" (declared at line 4) is inaccessible
a = Bb.a;
^
detected during instantiation of "void A<T>::t(const A<T1> &) [with T=int, T1=float]" at line 17
代碼,而模板:
class A{
protected:
int a;
public:
A(int i){
a = i;
}
void t(const A & Bb){
a = Bb.a;
}
};
int main(void){
A Aa(5);
A Bb(0);
Aa.t(Bb);
}
感謝您的解釋。 – rxu