2013-02-08 29 views
8

Tôi có lớp cơ sở sauCác "Sử dụng" từ khóa để gọi lớp cơ sở constructor

class Grammateas 
{ 
public: 
Grammateas(std::string name):_name(name){}; 
    virtual ~Grammateas(){}; 
private: 
    std::string _name; 
}; 

và lớp được thừa kế sau

class Boithos final : public Grammateas 
{ 
public: 
    //using Grammateas::Grammateas; 
    Boithos(int hours):Grammateas("das"),_hours(hours){}; 
    virtual ~Boithos(){}; 
private: 
    int _hours; 
}; 

Tôi muốn sử dụng các constructor lớp cơ sở để tạo ra đối tượng như này

Boithos Giorgakis(5); //works 
    Boithos Giorgakis("something"); //Bug 

Tôi đọc rằng tôi có thể sử dụng từ khóa sử dụng nhưng khi tôi cố gắng sử dụng từ khóa như

using Grammateas::Grammateas; 

Trình biên dịch trở lại nhắn

error: ‘Grammateas::Grammateas’ names constructor

bạn có thể giúp tôi hiểu được những từ khóa sử dụng với nhà thầu?

+1

Nó dành cho * kế thừa * constructors ... –

+2

Cuối cùng tôi thấy rằng tính năng này chỉ có sẵn tại GCC 4.8 Tôi có gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2 –

Trả lời

9

Mã của bạn - với using Grammateas::Grammateas; không được chú ý - sẽ hoạt động. (Nhưng hãy cẩn thận: nhà xây dựng kế thừa sẽ để lại _hours chưa được khởi tạo.)

Kế thừa các nhà xây dựng thông qua using - các tuyên bố là một tính năng mới trong C++ 11. Có lẽ trình biên dịch của bạn chưa hỗ trợ tính năng này hoặc có vấn đề kết hợp các nhà xây dựng kế thừa và các tình trạng quá tải khác. (Nếu nó chấp nhận thông số final, có vẻ như nó được thiết lập chính xác để biên dịch C++ 11 ở vị trí đầu tiên.)

+3

Tôi thấy rằng tính năng này chỉ khả dụng ở GCC 4.8. Tôi có GCC (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2. Cũng ổn với từ khóa cuối cùng và -std = C++ 11 –

Các vấn đề liên quan