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