使用“Using”关键字调用基类构造函数

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;

编译器返回一个消息

错误:‘Grammateas :: Grammateas’命名的构造函数

你能帮我理解使用关键字和构造函数吗?


1
这是用于继承构造函数的... - Kerrek SB
2
最终我发现这个功能只能在GCC 4.8上使用。 我有gcc(Ubuntu/Linaro 4.7.2-2ubuntu1)4.7.2。 - Avraam Mavridis
1个回答

9
你的代码 - 去掉注释的 using Grammateas::Grammateas; 部分 - 应该可以正常工作。(但是注意: 继承的构造函数会使 _hours 变量未初始化。)
通过 using 声明继承构造函数是 C++11 中的新功能。也许你的编译器还不支持此功能,或者在组合继承构造函数和其他重载方面存在问题。(如果它接受 final 限定符,那么它似乎已经正确设置为编译 C++11。)

3
我发现这个功能仅适用于GCC 4.8。 我有GCC(Ubuntu/Linaro 4.7.2-2ubuntu1)4.7.2。 使用关键字"final"和"-std=c++11"是可以的。 - Avraam Mavridis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接