2013-04-02 32 views
6

Tôi có lớp cơ sởOverride từ khóa ném một lỗi khi biên dịch

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

public: 
    virtual void myfunc()=0; 
} 

Tôi đã có nguồn gốc lớp

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

public: 
    void myfunc() override; 
} 

Khi tôi biên dịch g++ -std=c++0x, tôi nhận được lỗi với chức năng trọng đánh dấu, error: expected ‘;’ at end of member declaration error: ‘override’ does not name a type

phiên bản g ++ là 4.6.

+2

Tôi nghĩ rằng bạn cần phải xác định 'myfunc' là 'myfunc()' trong lớp cơ sở của bạn, nếu không ghi đè là ill- hình thành. – maditya

+0

xin lỗi, lỗi đánh máy khi đang nhập câu hỏi – user592748

Trả lời

7

g ++ 4.6.3 không hỗ trợ tính năng override của C++ 11. Khi bạn lấy đi các lỗi syntatical, mã này biên dịch tốt trong 4.7.2 và Clang.

Hơn nữa, tôi nghĩ rằng đây là những gì bạn có nghĩa là mã của bạn là:

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; 
};