2013-04-02 3 views
6

У меня есть базовый классПереопределение ключевого слова бросали ошибку при компиляции

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

public: 
    virtual void myfunc()=0; 
} 

Я производный класс

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

public: 
    void myfunc() override; 
} 

Когда я компилирую g++ -std=c++0x, я получаю ошибку с переопределенной функции выделены, error: expected ‘;’ at end of member declaration error: ‘override’ does not name a type

g ++ версия 4.6.

+2

Я думаю, вам нужно указать 'myfunc' как' MyFunc() 'в базовом классе, в противном случае коррекция жестокого формируется. – maditya

+0

извините, опечатка во время ввода вопроса – user592748

ответ

7

g ++ 4.6.3 не поддерживает функцию override C++ 11. Когда вы убираете синтаксические ошибки, этот код компилируется в 4.7.2 и Clang.

Кроме того, я думаю, что это то, что вы имели в виду ваш код будет:

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; 
}; 
Смежные вопросы