klassentemplate problem!



  • hi leute ich hab ein problem mit meinem klassentemplate. kann mir jemand helfen?

    number.h

    template<typename type>
    class number
    {
    private:
    	type	value_;
    
    public:
    	number(void) : value_(0)
    	{
    
    	}
    
    	number(const type value) : value_(value)
    	{
    
    	}
    
    	~number(void)
    	{
    
    	}
    
    	type	getValue(void) const;
    	void	setValue(type value);
    
    	type	operator +(number other);
    	type	operator -(number other);
    	type	operator *(number other);
    	type	operator /(number other);
    };
    

    number.cpp

    //*********************************************************************//
    #include "number.h"
    
    //*********************************************************************//
    template<typename type>
    type number<type>::getValue(void) const
    {
    	return(value_);
    }
    
    //*********************************************************************//
    template<typename type>
    void number<type>::setValue(type value)
    {
    	value_ = value;
    }
    
    //*********************************************************************//
    template<typename type>
    type number<type>::operator +(number other)
    {
    	return(value_ + other.getValue());
    }
    
    //*********************************************************************//
    template<typename type>
    type number<type>::operator -(number other)
    {
    	return(value_ - other.getValue());
    }
    
    //*********************************************************************//
    template<typename type>
    type number<type>::operator *(number other)
    {
    	return(value_ * other.getValue());
    }
    
    //*********************************************************************//
    template<typename type>
    type number<type>::operator /(number other)
    {
    	if(other.getValue() == 0)
    		return 0;
    
    	return(value_ / other.getValue());
    }
    

    und main.cpp

    #include <iostream>
    #include "number.h"
    
    using namespace std;
    
    int main()
    {
    	number<int> zahl1(20);
    	number<int> zahl2(13);
    
    	cout << "operator+ (20, 13) == " << zahl1 + zahl2 << endl;
    
    	return 0;
    }
    

    folgender fehler:
    error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: int __thiscall number<int>::operator+(class number<int>)" (??H?$number@H@@QAEHV0@@Z)" in Funktion "_main".



  • Bei templates muss die Implementation in der selben Datei stehen wie der Rumpf der Klasse...



  • Wenn du die Implementierung für eine Template-Klasse in einer separaten Implementierungsdatei unterbringen willst, solltest Du folgendermaßen einbinden und die cpp-Datei vom Build ausschließen.

    // number.h
    
    template<typename type>
    class number
    {
    //...
    };
    
    #include "number.cpp"
    

    Genausogut kannst du die Implementierung direkt in den Header aufnehmen.



  • aha! deswegen hab ich keine beispiele für klassentemplates gefunden, wobei header- und quelldatein verwendet werden 😉
    danke jungs für die info


Anmelden zum Antworten