Templates & Linkerfehler



  • Hi, ich bekomme bei diesem Code:

    #include <iostream>
    using namespace std;
    
    template <class T>
    class Foo {
    private:
    	T var;
    public:
    	Foo(T v):var(v) { }
    	~Foo() { }
    	T getVar() const { return var; }
    	void setVar(T var) { this->var = var; }
    	friend ostream& operator<<(ostream& o, const Foo& rhs);
    	operator T*() const;
    };
    
    template <class T>
    ostream& operator<<(ostream &o, const Foo<T>& rhs) {
    	o << rhs.var;
    	return o;
    }
    
    template <class T>
    Foo<T>::operator T*() const {
    	return &var;
    }
    
    int main() {
    	Foo<int> f(10);
    	cout << f;
    
    	int i2;
    	cin >> i2;
    	return 0;
    }
    

    folgenden Linkerfehler:
    main.obj : error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Foo<int> const &)" (??6@YAAAV?basic_ostream@DU?basic\_ostream@DU?char_traits@D@std@@@std@@AAV01@ABV?$Foo@H@@@Z) referenced in function _main
    Debug/cpplearning.exe : fatal error LNK1120: 1 unresolved externals

    Ich kann mit diesem Linkerfehler allerdings nichts anfangen. Was habe ich in meiner Klasse falsch gemacht?


Anmelden zum Antworten