2012-06-07 7 views
5

Próbuję utworzyć ogólny szablon bufora cyklicznego, ale istnieje pewien błąd składniowy, którego nie mogę zrozumieć. Błąd jest w moim konstruktorze, chociaż wydaje się, że sparametryzowałem destruktor w ten sam sposób i że działa. Podążyłem za przykładem w Stroustrup C++ i używa on parametru przed operatorem rozdzielczości, a także w nazwie funkcji, tak jak ja. Jestem również pewien, że nie ma żadnych okrągłych zależności, ponieważ kompiluję tylko jeden plik. Również implementacja i deklaracje znajdują się w tym samym pliku (CircBuf.h) i nie ma odpowiedniego pliku .cpp, więc również nie powinno to stanowić problemu. Próbowałem dodać słowo kluczowe "inline" zgodnie z this rozwiązanie i pojawia się ten sam błąd.Składnia konstruktora w klasie szablonu

/* CircBuf.h */ 
template<typename T> class CircBuf { 
    // don't use default ctor                                    
    CircBuf(); 

    int size; 
    T *data; 
public: 
    CircBuf(int); 
    ~CircBuf(); 
}; 

template<typename T> CircBuff<T>::CircBuf<T>(int i) { 
    data = new T[i]; 
} 
template<typename T> CircBuf<T>::~CircBuf<T>() { 
    delete data; 
} 

makefile

all: 
     g++ -g -pedantic CircBuf.h -o prog 

kompilator błędów

CircBuf.h:13:22: error: ‘CircBuff’ does not name a type 
+5

Napisałeś 'CircBuff' zamiast' CircBuf' w jednym wystąpieniu. Oto, co próbuje ci powiedzieć kompilator. –

Odpowiedz

9

CircBuff pewnością nie nazwać typ, nazwa typu ty przeznaczone jest CircBuf z jednym f.

Należy również pamiętać, że należy również utracić ciąg kończący <T> zarówno na konstruktorze, jak i destruktorze.

+3

wow Nie mogę uwierzyć, że właśnie popełniłem ten błąd – xst

+0

CircBuf.h: 15: 22: error: 'CircBuf :: CircBuf' nazywa konstruktora, a nie typem CircBuf.h: 15: 22: error: and ' CircBuf "nie ma konstruktorów szablonów – xst

+0

usunąłem parametr z nazwy funkcji w ten sposób i działa: szablon CircBuf :: CircBuf (int i) – xst