我正在制作一个游戏(在OpenGL / SDL中),其中有一般实体和从Entity类派生的特定对象。我有一个这样的子弹派生类。以下是Entity和Bullet类的定义:
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;
};
由于派生类不继承构造函数,我为bullet类创建了另一个构造函数(初始化与基类相同的程序)。出于某种原因,我在派生类中的初始化列表之后的开括号上得到了预编译错误:No default constructor exists for class "Entity"
。
可能只是因为我已经看了很长时间的代码,但我相当肯定我已经正确地初始化了派生类中的所有内容,并且没有' t正在使用的任何默认构造函数。可能导致错误的原因是什么?
答案 0 :(得分:1)
除非您为基类构造函数显式提供参数,否则将使用基类的默认构造函数。你想要这个:
Bullet(ShaderProgram program, float angle, float timeAlive) :
Entity(program), angle(angle), timeAlive(timeAlive) {}
你可能不希望派生类中有program
,因为它是从Entity继承的。