2017-06-03 4 views
1

継承され認識されません。私は2つのクラスがあります。これは、entTypeを除いて、コピーコンストラクタ内のすべての変数で発生します。 私がしようとしているのは、同じSDL_Surfaceを使ってentityのベクトルを持つことです。したがって、同じentTypeのすべてのオブジェクトがspriteHandleの同じ値を持つ別のクラスを作成する必要があると感じました。これは同じ画像を指しているはずです。これは、私が画面に飛び散らそうとしている画像のインスタンスが75個ある場合に最も便利です。私は毎回新しいポインタを作成するのではなく、情報がコピーされるように、ベクトルのコンストラクタレイアウトを使用したいと思います。コピーコンストラクタがメンバー

+1

[初期化リスト(C++)で親の保護されたメンバーを初期化](https://stackoverflow.com/questions/2290733/initialize-parents-protected-members-with-initialization-list-c)の可能性の重複 –

+0

あなたが持っている問題を指摘するために、このコードをすべて投稿する必要はありませんでした。 [例](http://ideone.com/XAu2el) – PaulMcKenzie

+0

ありがとう@PaulMcKenzie。私はそれを覚えて、将来的にはより説明的になるようにしようとします。 –

答えて

2

派生クラスのコピーコンストラクタで基本クラスのメンバーを初期化することはできません。基本クラスのコピーコンストラクタを使用して初期化する必要があります。あなただけのリストinitalizerメンバーにそれを呼び出す必要があります。

multiEntity (const multiEntity& old) : 
    entity(old),   // initialize entity's members via entity::entity(const entity&) 
    entType(old.entType) // initialize multiEntity's member entType 
{} 

、基本クラスのコピーコンストラクタの動作はあなたが望むものではない場合、あなたは例えば、派生クラスのコンストラクタ本体にいくつかの割り当てを行うことができます

multiEntity (const multiEntity& old) : 
         // nothing specified, same as write entity() here 
         // entity's members will be initialized via entity::entity() 
    entType(old.entType) // initialize multiEntity's member entType 
{ 
    // perform assignment here 
    spriteFile = old.spriteFile; 
    x = old.x; 
    y = old.y; 
    spriteHandle = old.spriteHandle; 
    pos = old.pos; 
} 
+0

どうすればSDL_Surfaceがシャローコピーであることを保証できますか?私はそれが親クラスのデータをコピーするが、子クラスのアドレスだけをコピーします。 –

+0

@BobPaw回答が改訂されました。 – songyuanyao

関連する問題