オーバーロードされたistreamおよびostreamを宣言して使用する必要がありますか?これは私のコードです:クラステンプレートにシームレスにオーバーロードする
.hhファイルに:
.ccpファイル内template <typename TypWart>
class matrix{
private:
bool poprawny;
int rozmiar;
TypWart *tab;
TypWart *wyniki;
TypWart *wyrazy;
wektor *z;
public:
void alokuj();
void gauss();
TypWart rozwiaz();
void wypisz();
void zamien(int k, int l);
void sprawdz();
zespolona& operator[](int x){
return tab[x];
}
wektor pomnoz(wektor W, wektor A);
wektor odejm(wektor W, wektor A);
wektor przypisz();
//matrix skopiuj(matrix M);
wektor przypisz2();
// wektor pierwiastek(wektor W);
wektor operator*(wektor W);
template <typename Typ>
friend istream& operator>>(istream& strm, matrix<Typ>& M);
template <typename Typ>
friend ostream& operator<<(ostream& strm, matrix<Typ>& M);
friend ostream& operator<<(ostream& strm, wektor W);
};
:
template <typename Typ>
istream& operator>>(istream& strm, matrix<Typ>& M){
int x,y;
//strm >> x >> y;
for(x=0; x<M.rozmiar; x++){
for(y=0; y<M.rozmiar; y++){
if(!(strm >> M.tab[y+(x*M.rozmiar)])) return strm;
}
}
for(x=0; x<M.rozmiar; x++) if(!(strm >> M.wyniki[x])) return strm;
return strm;
}
template <typename Typ>
ostream& operator<<(ostream& strm, matrix<Typ>& M){
int x,y;
//strm << x << " " << y << endl;
for(x=0; x<M.rozmiar; x++){
for(y=0; y<M.rozmiar; y++){
strm << M.tab[y+(x*M.rozmiar)];
strm << " ";
}
strm << endl;
}
return strm;
}
そして、私は取得していますエラー:
main.o: In function `main':
main.cpp:(.text+0x24): undefined reference to `std::basic_istream<char, std::char_traits<char> >& operator>><zespolona>(std::basic_istream<char, std::char_traits<char> >&, matrix<zespolona>&)'
collect2: ld returned 1 exit status
make: *** [a.out] Error 1
私が試しました.hhファイルの宣言に<>を追加しましたが、動作しませんでした。これをどうやって解決するのですか?
不完全で疑問のない質問ですが、私はこれを読んでいると助けになると思います:http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file – user4581301