未定义引用`operator>>(std :: istream&,LZespolona&)'

时间:2014-05-06 19:00:03

标签: c++ templates operator-overloading istream ostream

当我尝试创建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) ;

0 个答案:

没有答案