在我的sdl c ++ pong游戏中继承

时间:2014-03-08 01:51:29

标签: c++ inheritance

所以我尝试使用sdl实现一个pong游戏,但是使用类和继承。

所以我计划有一个基础Puck类来定义我的桨。 PlayerPuck和EnemyPuck将继承这个基类。基础Puck类处理基础板的所有初始化和绘制。从这里我试图派生一个子类在我的playerPaddle上添加额外的东西,比如检查碰撞和边界等。但是当我尝试在我的主类中多态地创建对象时,它会引发我很多错误。

这是我的Base Puck Header文件

#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>

class Puck{
private:
    SDL_Rect puckPaddle;
public:
    Puck();
    Puck(int x,int y,int width,int height);
    int getX();
    int getY();
    int getHeight();
    int getWidth();
    SDL_Rect* getPaddleRect();
    void setX(int x);
    void setY(int y);
    void setHeight(int height);
    void setWidth(int width);

    void Render();  // should be virtual, leave it for now
    void Update();  // should be virtual, leave it for now
};

这只是我的头文件。我已经在cpp文件中完成了它的实现,它运行正常。

现在问题出现在我的PlayerPuck中,我从Puck派生出来如下

#include "Puck.h"

class PlayerPuck : public Puck {
public:
    PlayerPuck();
    PlayerPuck(int x, int y, int width,int height);
    void UpdatePosition();
    void CheckBounds();
};

在我的主要功能中,当我执行以下操作时,它会给出错误,如

  

C2504:&#39; Puck&#39;基类未定义

     

错误C2440:&#39; =&#39; :无法转换为&#39; PlayerPuck *&#39;到了&Puck *&#39;

 #include "Ball.h"
    #include "Puck.h"
    #include "PlayerPuck.h"

    Puck* p;

    void Initialize(){

        if(SDL_Init(SDL_INIT_EVERYTHING) == -1)
            running = false;
        TTF_Init();
        p = new PlayerPuck(50,150,200,100);
    }

我的错误是什么?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,只需添加“PlayerPuck.h”头文件并删除“Puck.h”,因为我的主函数中有两个相同的标题

现在,如果我尝试调用虚函数

,我会收到链接器错误

在我的基础Puck类中我定义了一个虚函数Test()

#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>

    class Puck{
    private:
        SDL_Rect puckPaddle;
    public:
        Puck();
        Puck(int x,int y,int width,int height);
        int getX();
        int getY();
        int getHeight();
        int getWidth();
        SDL_Rect* getPaddleRect();
        void setX(int x);
        void setY(int y);
        void setHeight(int height);
        void setWidth(int width);

        **virtual void Test();**   --> here
    };

我在派生的playerPuck类中调用它

#include "Puck.h"

class PlayerPuck : public Puck {
public:
    PlayerPuck();
    PlayerPuck(int x, int y, int width,int height);
    void UpdatePosition();
    void CheckBounds();
    **void Test();**  --> here
};

当我在main中创建我的playerPuck obj并尝试调用该函数时,它会抛出我 LNK2001 - 未解决的外部符号错误

#include "Ball.h"
#include "PlayerPuck.h"

PlayerPuck* playerPuck;

playerPuck = new PlayerPuck(50,200,20,100);

void Update(){
    //playerPuck->UpdatePosition();
    playerPuck->Test();
}