Я делаю игру (в OpenGL/SDL), где есть общие объекты и конкретные объекты, которые получены из класса Entity. У меня есть один такой производный класс для пуль. Вот определение для классов сущностей и Пуль:Ошибка при создании конструктора производного класса
class Entity {
public:
Entity(ShaderProgram program): program(program){}
void Draw() {
}
void Update(float elapsed) {
// move stuff and check for collisions
}
void Render() {
// for all game elements
// setup transforms, render sprites
}
float x;
float y;
float rotation;
int textureID;
float width;
float height;
float speed;
float direction_x;
float direction_y;
ShaderProgram program;
GLuint spriteSheetTexture = LoadTexture("sheet.png");
SheetSprite mySprite = SheetSprite(spriteSheetTexture, 241.0f/1024.0f, 941.0f/1024.0f, 99.0f/1024.0f, 75.0f /1024.0f, 0.2, program);
};
class Bullet : public Entity {
public:
Bullet(ShaderProgram program, float angle, float timeAlive) : program(program), angle(angle), timeAlive(timeAlive){}
float angle;
float timeAlive;
ShaderProgram program;
};
Как производные классы не наследуют конструктор, я сделал еще один конструктор (инициализацию и ту же программу в качестве базового класса) для класса пули. По какой-то причине я получаю ошибку предварительной компиляции: No default constructor exists for class "Entity"
на открытой фигурной скобе после списка инициализации в производном классе.
Возможно, я слишком долго смотрел на код, но я уверен, что я правильно инициализировал все в производном классе, и не используется какой-либо конструктор по умолчанию. Что может быть причиной ошибки?
О, хорошо, но не по умолчанию конструктор означает конструктор, который используется, когда ни один не указан? Кроме того, просто для подтверждения, когда вы укажете конструктор производного класса, в котором должны быть инициализированы переменные из базового класса, вы должны использовать базовый класс для правильной инициализации переменных (например, '' 'Entity (program)' '') – loremIpsum1771
@ loremIpsum1771: Конструктор по умолчанию - это тот, который можно вызвать без параметров. И да, вы обычно должны позволить базовому классу инициализировать члены базового класса, а не пытаться инициализировать их в производном классе. –
Итак, в основном, если базовый класс имеет непустые параметры ctor, то соответствующие параметры в производном классе должны быть инициализированы базовым классом ctor. – loremIpsum1771