#include <iostream>
using namespace std;
template <typename T>
class test
{
T y;
public:
test(T k) : y(k) {}
friend int a(T& x);
};
template <typename T>
int a(T& x)
{
cout << x.y;
return 9;
}
template <>
class test<int>
{
int y;
public:
test(int k) : y(k) {}
friend int a(int& x);
};
template <>
int a<int>(int& x)
{
cout << "4";
return 0;
}
int main(int argc, char* argv[])
{
test<int> z(3);
a(z);
return 0;
}
我想交個朋友類測試類的(在真實情況下,這是一個運營商的ofstream的< <)。但我不知道如何定義專業類的模板好友功能。朋友專門的模板類(C++)
此外,上面的代碼顯示了這個編譯錯誤信息;
錯誤C2248: '測試:: Y':不能訪問私有成員在 類 '測試'
問題補充申報;
亞倫麥克戴德適合我,但我試圖超載運營商< < ofstream class。
friend ofstream& operator<< <test<int>> (ofstream& os, const test<int>& t);
我添加到以上測試類和
template<>
ofstream& operator<< <test<int> > (ofstream& os, const test<int>& t)
{
os << t.y;
return os;
}
使用上面的代碼的代碼。但它看起來像我不能使用操作系統< < t.y(這是INT)我不明白爲什麼會發生這種情況。該錯誤消息是
錯誤C2027:使用未定義的類型 '的std :: basic_ofstream < _Elem,_Traits>'
或'朋友詮釋一個<>(INT & x);` – Xeo 2011-12-16 11:54:37
@Xeo,這是不正確的參數是'測試``不int` –
2011-12-16 12:34:15
@Aaron:對,我沒注意到。然而,Bo的回答也是錯誤的,因爲如果`test`被實例化爲兩種不同的類型,它會產生ODR違規。 – Xeo 2011-12-16 12:38:16