Templates und Konstruktoren...unverständlich??
-
Hallo Zusammen
Ich habe folgenden Quelltext:
0203.cpp
#include <iostream> using namespace std; int main() { CircularBuffer<int> a(); (error: expected primary-expression before "template" error: expected `;' before "template") for(int i=0;i<15;i++) { a.add(i); (error: `a' was not declared in this scope) } return 0; }0203.cpp.h
#include <iostream> using std::cout; using std::endl; template <typename T> CircularBuffer<T>::CircularBuffer() { next = index; for(int i=0;i<20;i++) { A[i] = 0; } } template <typename T> void CircularBuffer<T>::add(T& value) { int i=0; while(i<20) { if(A[i]==" ") A[i]=value; else i++; } if(i==20) A[0]=value; } template <typename T> void CircularBuffer<T>::find(T& value) { int i=0; while(i<20&&A[i]!=value) i++; if(A[i]==value) cout << "An der Stelle " << i << " ist der Wert " << value << " vorhanden."; else cout << "Der Wert " << value << " ist im Buffer nicht enthalten."; } template <typename T> void CircularBuffer<T>::print() { cout << "Die Werte im Buffer betragen: "; for(int i=0;i<20;i++) { cout << A[i]; } }0203.h
#include <iostream> #include "0203.cpp.h" template <typename T> class CircularBuffer { public: CircularBuffer(); void add(T value); void find(T value); void print(); T A[20]; private: int next; };**** Internal Builder is used for build **** g++ -O0 -g3 -Wall -c -fmessage-length=0 -osrc\0203.o ..\src\0203.cpp ..\src\0203.cpp: In function `int main()': ..\src\0203.cpp:12: error: expected primary-expression before "template" ..\src\0203.cpp:12: error: expected `;' before "template" ..\src\0203.cpp:16: error: `a' was not declared in this scope ..\src\0203.cpp:16: warning: unused variable 'a' Build error occurred, build is stopped Time consumed: 1875 ms.Warum ist a nicht declared?? ich deklariere a doch... Ist der Compiler noch bei Sinnen...???
lg
joethe
-
Kennst du diesen Spruch:
"Das Problem sitzt meistens nicht im Computer, sondern davor!"
Tja, gilt natürlich auch für deinen Fall!
Das ist natürlich bestimmt nicht das was du machen willst:CircularBuffer<int> a();Sieht doch eigentlich fast so aus, oder:
int foo();Hem...
Du wolltest wohl eher das machen:CircularBuffer<int> a;Man lässt die Klammern weg, wenn man den Default-Ctor benutzen will.
-
Du machst ja auch nicht das:
int i();Sondern eher das:
int i;
-
Ausserdem, woher soll er CircularBuffer kennen? In <iostream> ist der sicher nicht enthalten.
Also echt, dem armen Compiler immer gleich etwas unterstellen zu wollen, fürchterlich.
