#1 5. März 2009 Fehler bei der Benutzung von Templates Hallo Zusammen Habe mal wieder ein C++ programm geschrieben, doch ich habe - glaube ich - irgendwo einen kleinen Fehler und finde ihn nicht. Kann mir jemand auf die Sprücnge helfen? Code: //============================================================================ // Name : 0203.cpp // Author : // Description : Circular Buffer //============================================================================ #include <iostream> #include "0203.h" using namespace std; CircularBuffer::CircularBuffer(int index) { next = index; for(int i=0;i<20;i++) { A[i] = 1; <- Linie 13 bzw 14 wäre hier } } void CircularBuffer::add(T value) { int i=0; while(i<20) { if(A[i]==" ") A[i]=value; else i++; } if(i==20) A[0]=value; } T CircularBuffer::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."; } void CircularBuffer::print() { for(int i=0;i<20;i++) { cout << "Die Werte im Buffer betragen: " << A[i]; } } int main() { CircularBuffer<int> buffer; buffer.print(); return 0; } und das header File Code: //============================================================================ // Name : 0203.h // Author : // Description : Circular Buffer //============================================================================ #include <iostream> template<typename T> class CircularBuffer { public: CircularBuffer(int next); void add(T value); T find(T value); void print(); T A[20]; private: int next; }; Builder Output: mfg joe The + Multi-Zitat Zitieren
#2 5. März 2009 AW: Fehler bei der Benutzung von Templates verwendest du den gcc? soweit ich mich erinnern kann benötigt der das schlüsselwort template vor entsprechenden aufrufen! du musst also dem compiler direkt sagen dass es sich hier um ein template handelt dort wo du auch auf eines zugreifst! genaue syntax weiß ich leider echt nicht mehr, ist gut 3 jahre aus dass wir das durchgekaut haben mit dem visual studio compiler sollte das problem übrigens nicht auftreten! + Multi-Zitat Zitieren
#3 9. März 2009 AW: Fehler bei der Benutzung von Templates Kleiner Tipp am Rande: Templates macht man am besten Header-only, also Code gleich mit in die Definition packen. Bitte schön: Code: template<typename T> class CircularBuffer { private: int next; public: T A[20]; CircularBuffer(int index) { next = index; for(int i=0;i<20;i++) { A[i] = 1; } } void add(T value) { int i=0; while(i<20) { if(A[i]==" ") A[i]=value; else i++; } if(i==20) A[0]=value; } 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."; return value; } void print() { for(int i=0;i<20;i++) { cout << "Die Werte im Buffer betragen: " << A[i]; } } }; Kompiliert ohne Probleme unter MSVC++... Du musst in der Main() auch die Klasse anders Deklarieren: CircularBuffer<int> buffer(HIER_MUSS_NOCH_EIN_WERT_REIN); Du hast nämlich keinen Konstruktor, der keine Werte entgegennimmt... mfg r90 + Multi-Zitat Zitieren
#4 9. März 2009 AW: Fehler bei der Benutzung von Templates Oooder wahlweise für die, unteranderem ich auch, es nicht passt direkt Inline zu definieren, include den Sourcecode am Ende vom Header: Code: #ifndef .. ... template<class T> class Abrakadabra { ... } /* class Abrakadabra */; #include "Abrakadabra.inl" // oder .c, aber bei sowas ist es wohl auffälliger wenn die datei mit dem Suffix .inl endet ... #endif + Multi-Zitat Zitieren
#5 25. März 2009 AW: Fehler bei der Benutzung von Templates wenn A nur ein mal == " " ist, hast dann eine fette endlosschleife xD Code: while(i<20) { if(A[i]==" ") A[i]=value; else i++; } + Multi-Zitat Zitieren