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

Base クラスのコンストラクターを使用して、このようなオブジェクトを作成したい

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

using キーワードを使用できると読みましたが、次のように使用しようとすると

   using Grammateas::Grammateas;

コンパイラはメッセージを返します

エラー: 'Grammateas::Grammateas' 名前コンストラクター

コンストラクターでの using キーワードを理解するのを手伝ってもらえますか?

4

1 に答える 1

9

using Grammateas::Grammateas;コメントなしのコードは機能するはずです。(ただし、注意してください。継承されたコンストラクターは初期化されないままになり_hoursます。)

-declarationsを介してコンストラクターを継承するusingことは、C++11の新機能です。コンパイラがこの機能をまだサポートしていないか、継承されたコンストラクタと他のオーバーロードの組み合わせに問題がある可能性があります。(指定子を受け入れる場合はfinal、最初にC ++ 11をコンパイルするように正しく設定されているように見えます。)

于 2013-02-08T12:43:26.227 に答える