000
07.07.2007, 23:16 Uhr
Botz3000
|
Hallo erstmal! Bin grad an diesem Buch "C++ in 21 Tagen" (ich weiss, dass solche bücher nicht unbedingt halten was sie versprechen aber ist zumindest ein anfang), hab auch schon gemerkt dass die Listings von vorne bis hinten voll mit Fehlern sind, hab die aber bis jetzt selbst beheben können. Naja, und ich bin jetzt bei Listing 19.4 hängengeblieben, weil das einfach nicht hinhauen will. Irgendwas passt mit dem operator nicht glaube ich. Ich hab sogar schon das komplette listing aus dem Buch kopiert und das dann benutzt, aber immer noch der selbe Fehler.
Hier ist mal das Listing:
C++: |
// Typenspezifische friend-Funktion in Template
// AHHHHH!!!!! #include <iostream> using namespace std; const int DefaultSize = 10;
class Animal { public: Animal(int); Animal(); ~Animal(){} int GetWeight()const{return itsWeight;} void Display()const{cout << itsWeight;} private: int itsWeight; };
Animal::Animal(int weight): itsWeight(weight) {}
Animal::Animal(): itsWeight(0) {}
template <class T> class Array { public: Array(int itsSize = DefaultSize); Array(const Array &rhs); ~Array(){delete [] pType;}
Array& operator= (const Array&); T& operator[] (int offSet) {return pType[offSet];} const T& operator[] (int offSet) const {return pType[offSet];}
int GetSize()const {return itsSize;}
friend ostream& operator<< (ostream&, Array&); private: T *pType; int itsSize; };
template <class T> ostream& operator<< (ostream& output, Array<T>& theArray) { for (int i = 0; i<theArray.GetSize(); i++) output << "[" << i << "] " << theArray[i] << endl; return output; }
template <class T> Array<T>::Array(int size): itsSize(size) { pType = new T[size]; for (int i = 0; i < size; i++) pType[i] = 0; }
template <class T> Array<T>::Array(const Array &rhs) { itsSize = rhs.GetSize(); pType = new T[itsSize]; for (int i=0; i<itsSize; i++) pType[i] = rhs[i]; }
template <class T> Array<T>& Array<T>::operator= (const Array &rhs) { if (this == &rhs) return *this; delete [] pType; itsSize = rhs.GetSize(); pType = new T[itsSize]; for (int i = 0; i < itsSize; i++) pType[i] = rhs[i]; return *this; }
int main() { bool Stop = false; // wozu auch immer... int offset, value; Array<int> theArray;
while (!Stop) { cout << "Offset (0-9) "; cout << "und Wert (-1 fuer Abbruch) eingeben: "; cin >> offset >> value; if (offset < 0) break; if (offset > 9) { cout << "***Bitte Werte zwischen 0 und 9.***\n"; continue; }
theArray[offset] = value; } cout << "\n Hier das vollstaendige Array: \n"; cout << theArray << endl; return 0; }
|
Die Fehlermeldung ist folgende: source.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 Array<int> &" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$Array@H@@@Z) referenced in function _main Debug/19.4 Einsatz des ostream-Operators.exe : fatal error LNK1120: 1 unresolved externals
Hab mich umgeschaut und hab bis jetzt nicht wirklich eine funktionierende Lösung finden können. Ich benutze Visual Studio.NET 2003.
Wäre super wenn mir jemand helfen könnte. Dieser Post wurde am 07.07.2007 um 23:19 Uhr von Botz3000 editiert. |