1

基本クラスから派生クラスに変換しようとしています。次のコンストラクターがありますが、コンパイラーは次のように文句を言います。

no matching function for call to ‘baseObject::baseObject()’

コンストラクタ:

derivedObject(const baseObject &base, const std::string &extra1)
{
    baseparameter1 = base.baseparameter1;
    baseparameter2 = base.baseparameter2;
    extraparameter1 = extra1;
}

何かアドバイス?

4

2 に答える 2

2

すべてのコンストラクターは、{. 本体で割り当てを使用する代わりに、メンバー初期化子リストを使用します。

derivedObject(const baseObject &base, const std::string &extra1)
    : baseObject(base),        // Calls the baseObject copy constructor
      extraParameter1(extra1)  // Initialize the direct member
{
}

これはより良いスタイルであり、遭遇したような問題も回避します。

于 2013-02-01T18:27:01.207 に答える
2

edit :baseObject構造をコピーします。

のデフォルトのコンストラクターを定義していないためbaseObject、コンパイラーは、使用するコンストラクターをderivedObject明示的に指定しないと を構築できませんbaseObject

の定義では、コンストラクタderivedConstructorを正確に指定する必要があります。baseObject私はあなたがどのようにbaseObject見えるか分からないので、以下のプレースホルダーを使用しました:

derivedObject(const baseObject &base, const std::string &extra1)
    : baseObject(PARAM1, PARAM2)
{
    baseparameter1 = base.baseparameter1;
    baseparameter2 = base.baseparameter2;
    extraparameter1 = extra1;
}

特定のケースで、既に存在するaderivedObjectから aを作成しようとしている場合は、のコピー コンストラクターを定義し、次のようにする必要があります。baseObjectbaseObject

derivedObject(const baseObject &base, const std::string &extra1)
    : baseObject(base)
{
    baseparameter1 = base.baseparameter1;
    baseparameter2 = base.baseparameter2;
    extraparameter1 = extra1;
}
于 2013-02-01T18:23:40.950 に答える