2013-04-02 6 views
6

I BasisklasseAufschalten Schlüsselwort einen Fehler zu werfen, während kompilieren

template<typename T> 
Class Base { 
    Base(); 

public: 
    virtual void myfunc()=0; 
} 

I Klasse

template<typename T> 
Class Derived: public Base<T> { 
    Derived():Base() { 
    } 

public: 
    void myfunc() override; 
} 

abgeleitet haben, wenn ich g++ -std=c++0x kompilieren, erhalte ich die Fehler mit der übergeordneten Funktion markiert, error: expected ‘;’ at end of member declaration error: ‘override’ does not name a type

g ++ Version ist 4.6.

+2

Ich glaube, Sie angeben müssen 'myfunc' als' myfunc() 'in Ihrer Basisklasse, da sonst die Überschreibung schlecht ist gebildet. – maditya

+0

Entschuldigung, Tippfehler während der Eingabe der Frage – user592748

Antwort

7

g ++ 4.6.3 unterstützt nicht die override Funktion von C++ 11. Wenn Sie die Syntaxfehler entfernen, kompiliert dieser Code in 4.7.2 und Clang.

Außerdem denke ich, das ist, was Sie Ihren Code gemeint sein:

template <typename T> 
class Base { 
    Base(); 

    public: 
     virtual void myfunc() = 0; 
}; 

template <typename T> 
class Derived : public Base<T> { 
    Derived() : Base<T>() {} 

    public: 
     void myfunc() override; 
};