2013-02-08 47 views
8

我有以下的基类“使用”关键字来调用基类的构造

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

和下面的派生类

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

我想使用的基类的构造函数来创建对象像这

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

我读,我可以使用using关键字,但是当我尝试使用它像

using Grammateas::Grammateas; 

编译器返回的消息

error: ‘Grammateas::Grammateas’ names constructor

你能帮助我了解使用关键字与构造的?

+1

它用于*继承*构造函数... – 2013-02-08 12:24:17

+2

最后,我发现这个特性只有在GCC 4.8 我有gcc(Ubuntu/Linaro 4.7.2-2ubuntu1)4.7.2 – 2013-02-08 12:41:48

回答

9

您的代码 - 与using Grammateas::Grammateas;未注释 - 应该可以工作。 (但要注意:继承的构造函数会使_hours未初始化。)

通过using继承构造函数--declarations是C++ 11中的一项新功能。也许你的编译器还不支持这个特性,或者在继承构造函数和其他重载的时候遇到问题。 (如果它接受final说明符,它似乎设置正确来编译C++ 11)

+3

我发现这个功能只在GCC 4.8上有效。 我有GCC(Ubuntu/Linaro 4.7.2-2ubuntu1)4.7.2。 可以用最后一个关键字和-std = C++ 11 – 2013-02-08 12:47:15