Предположим, что у меня есть базовый класс и производный класс, похожий на следующий: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);
}
}
Когда я назвал Derived :: getLocation() из другого места, нет никакой ошибки , Но когда я назвал Derived :: getWidth(), он дал мне ошибку сегментации. Мне нужно скопировать тот же код из базового класса (например, скопируйте код getWidth в производный класс), чтобы избежать ошибки. Я также попытался использовать «using Base :: getWidth;», но все же дал мне ошибку сегментации. Кажется, что если метод базового класса содержит указатели t
«... нет ошибки» - это вы знаете. Определите в этом какое-то здравомыслие. Должны ли быть ** два экземпляра 'Sprite', управляемых здесь? Один из них указывает на «Base :: sprite», а другой - на «Derived :: sprite»? Если нет, то у вас есть слишком много «спрайтов». И * пожалуйста *, включите в свой вопрос [минимальный, полный, проверяемый пример] (https://stackoverflow.com/help/mcve). – WhozCraig
Почему у них обоих есть другой Sprite * с тем же именем? –
Существует только один класс Sprite. Однако в производном классе после инициализации частного члена sprite мне нужно установить некоторое дополнительное свойство, используя метод sprite. Таким образом, конструктор отличается от базового класса. Таким образом, я должен объявить его в производном классе. – ohmygoddess