代碼很簡單;
頭檔案:
#include <iostream>
using namespace std;
template<typename T>
class ManyFriend
{
private:
T item;
public:
ManyFriend(const T & i) :item(i){}
template <typename C, typename D> friend void show2(C &, D &);
};
cpp檔案:
#include "ManyFriend.h"
template<typename C, typename D>void show2(C & c, D & d)
{
cout << c.item << " " << d.item << endl;
}
mian函式檔案:
#include "ManyFriend.h"
int main()
{
ManyFriend<int> M1(10);
ManyFriend<int> M2(20);
ManyFriend<double> M3(10.5);
show2(M1, M2);
cout << endl;
show2(M2, M3);
system("pause");
return 0;
}
報錯:1:1>源.obj : error LNK2019: 無法決議的外部符號 "void __cdecl show2<class ManyFriend<int>,class ManyFriend<int> >(class ManyFriend<int> &,class ManyFriend<int> &)" (??$show2@V?$ManyFriend@H@@V1@@@YAXAAV?$ManyFriend@H@@0@Z),該符號在函式 _main 中被參考
2:1>源.obj : error LNK2019: 無法決議的外部符號 "void __cdecl show2<class ManyFriend<int>,class ManyFriend<double> >(class ManyFriend<int> &,class ManyFriend<double> &)" (??$show2@V?$ManyFriend@H@@V?$ManyFriend@N@@@@YAXAAV?$ManyFriend@H@@AAV?$ManyFriend@N@@@Z),該符號在函式 _main 中被參考
uj5u.com熱心網友回復:
模板類的實作要寫到頭檔案中uj5u.com熱心網友回復:
1、你既然在模板函式前加了friend,說明此函式不是模板類的成員,單純是一個模板函式,那么,它的實作你應該放在此模板類的前邊,而不是放到cpp里去
//---------------------------------------------------------------------------
#ifndef ManyFriendH
#define ManyFriendH
//---------------------------------------------------------------------------
#include <iostream>
using namespace std;
template<typename C, typename D>void show2(C & c, D & d)
{
cout << c.item << " " << d.item << endl;
}
template<typename T>
class ManyFriend
{
private:
T item;
public:
ManyFriend(const T & i) :item(i){}
template <typename C, typename D> friend void show2(C &, D &);
};
#endif
uj5u.com熱心網友回復:
類模版的宣告和定義,都要放到.h,也就是頭檔案中,不能分開轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/72781.html
標籤:基礎類
上一篇:類的實體
