当我尝试创建LZespolona类型Wektor时,我收到两条错误消息:
undefined reference to `operator>>(std::istream&, LZespolona&)'|
undefined reference to `operator<<(std::ostream&, LZespolona const&)'
当我创建Wektor<double>
时,一切都很好,但当我尝试创建我的抽象类型Wektor
的{{1}}时,有些错误。我猜它与LZespolona的运算符重载的错误实现有关。
main.cpp中:
<LZespolona>
Wektor.hh:
#include <iostream>
#include "Wektor.hh"
#include "lzespolona.hh"
using namespace std;
int main()
{
Wektor<LZespolona> W; //When it's `Wektor<double> W` everything works fine
cin >> W;
}
LZespolona.hh的一部分:
#include "rozmiar.h"
#include "lzespolona.hh"
#include <iostream>
template<typename typ>
class Wektor
{
typ tabwektor[ROZMIAR];
public:
typ operator [] (int xyz) const {return tabwektor[xyz];}
typ& operator [] (int xyz) {return tabwektor[xyz];}
};
template<typename typ>
std::istream& operator >> (std::istream &Strm, Wektor<typ> &Wek)
{
for (int i=0; i<ROZMIAR; i++)
{
std::cin >> Wek[i];//undefined reference to `operator>>(std::istream&, LZespolona&)'|
}
return Strm;
}
template<typename typ>
std::ostream& operator << (std::ostream &Strm, Wektor<typ> &Wek)
{
for (int i=0; i<ROZMIAR; i++)
{
std::cout << Wek[i]<<" "; //undefined reference to `operator<<(std::ostream&, LZespolona const&)'
}
std::cout<<std::endl;
return Strm;
}
LZespolona.cpp:
std::ostream& operator << ( std::ostream& StrmWy,
const LZespolona& WyswietlanaLiczba
std::istream& operator >> ( std::istream&StrmWe, LZespolona &zespolona) ;