我有以下基类
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;
};
我想使用Base类构造函数来创建像这样的对象
Boithos Giorgakis(5); //works
Boithos Giorgakis("something"); //Bug
我读到我可以使用using关键字但是当我尝试使用它时
using Grammateas::Grammateas;
编译器返回消息
错误:'Grammateas :: Grammateas'的名字构造函数
你能帮我理解带有构造函数的using关键字吗?
答案 0 :(得分:9)
您的代码 - using Grammateas::Grammateas;
取消注释 - 应该有效。 (但要注意:继承的构造函数会使_hours
保持未初始化。)
通过using
继承构造函数 - 声明是C ++ 11中的一项新功能。也许您的编译器还不支持此功能,或者在继承的构造函数和其他重载相结合时遇到问题。 (如果它接受final
说明符,则它似乎正确设置为首先编译C ++ 11。)