创建派生类构造函数时出错

Error when when creating Derived Class constructor

本文关键字:出错 构造函数 派生 创建      更新时间:2023-10-16

我正在制作一个游戏(在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;
};

由于派生类不继承构造函数,因此我为 bullet 类创建了另一个构造函数(初始化与基类相同的程序)。出于某种原因,我收到预编译错误:在派生类的初始化列表之后No default constructor exists for class "Entity"在打开大括号上。

可能只是因为我看代码太久了,但我相当确定我已经正确初始化了派生类中的所有内容,并且没有使用任何默认构造函数。可能导致错误的原因是什么?

除非显式为基类构造函数提供参数,否则将使用基类的默认构造函数。 你想要这个:

Bullet(ShaderProgram program, float angle, float timeAlive) : 
Entity(program), angle(angle), timeAlive(timeAlive) {}

您可能不希望派生类program,因为它是从 Entity 继承的。