を与える、私は次のような基底クラスと派生クラスがあるとします。C++派生クラスのコールベースクラスのメソッドは、セグメンテーションフォールトに
#include "Sprite.h"
class Base{
private:
int X; //location
Sprite* sprite;
public:
Base(Sprite* sprite){
sprite = new Sprite(some parameter);
}
int getLocation(){
return X;
}
int getWidth(){
return sprite->getWidth();
}
}
class Derived : public Base{
private:
Sprite* sprite; // here I have to redefine it in constructor
public:
Derived(Sprite* sprite); // it's different that base constructor
{ sprite = new Sprite(some parameter);
sprite->setPriperty(some parameter);
}
}
私が派生呼び出されると::のgetLocation()他の場所から、エラーはありません。しかし、私はDerived :: getWidth()を呼び出すと、私にセグメント化エラーが発生しました。私は、フォールトを避けるために、ベースクラスから同じコードをコピーする必要があります(つまり、getWidthのコードを派生クラスにコピーする必要があります)。私も "Base :: getWidth;を使って"しようとしましたが、まだ、私にセグメンテーションフォールトを与えました。基本クラスメソッドにポインタが含まれていると思われる場合
"...エラーはありません" - それはあなたが知っている。これでいくつかの正気を定義します。 ** ** Spriteインスタンスがここで管理されているはずですか? 1つは 'Base :: sprite'と' Derived :: sprite'で指摘されていますか?もしそうでなければ、あまりにも多くのスプライト*をホストしています。そして、*お願いします。あなたの質問には、[最小で完全で検証可能な例](https://stackoverflow.com/help/mcve)が含まれています。 – WhozCraig
なぜ同じ名前のSprite *を持っているのですか? –
Spriteクラスは1つだけです。しかし、派生クラスでは、プライベートスプライトメンバーを初期化した後、スプライトのメソッドを使用して追加のプロパティを設定する必要があります。したがって、コンストラクタは基本クラスとは異なります。したがって、派生クラスで宣言する必要があります。 – ohmygoddess