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. 😉


Anmelden zum Antworten