首页 > 解决方案 > 抽象类中的虚函数未被调用

问题描述

我正在使用 GameObject/Entity 系统开发一个基本的游戏循环,但我对 C/C++ 真的很陌生(但我之前在 C# 中使用过 Raylib 的绑定,这是我正在使用的库,所以我了解它是如何工作的)。

我一直在努力,主要是了解 C/++ 如何处理指针和虚函数。我没有错误,并且在插入一些调试调用后发现了我的问题,这表明我的背景实际上并没有对其执行任何操作,尽管它们被调用,这导致人们相信我的狡猾的虚函数是类Background里面的责备。

老实说,我很想得到任何帮助(请烤我的代码,我需要学习很多东西,我还删除了肤浅的代码):

//main.cpp
int main(void)
{   
    // Init
    std::vector<GameObject*> gameObjects;

    Background bg;
    gameObjects.push_back(&bg);

    // Main game loop
    while (!WindowShouldClose())
    {
        // Update
        for (GameObject* gameObject : gameObjects)
        {
            gameObject->Update();
        }
        // Draw
        for (GameObject *gameObject : gameObjects)
        {
            gameObject->Render();
        }
    }
    //End
    return 0;
}

//gameobject.h
class GameObject
{
    public:
        GameObject(void) {};
        virtual void Update() = 0;
        virtual void Render() = 0;
        ~GameObject(void) {};
};

//background.h
#include "gameobject.h"

class Background : public GameObject
{
    public:
        Background(void){};
        virtual void Update(){};
        virtual void Render(){};
        ~Background(void){};
    private:
        Texture texture;
};

//background.cpp
#include "background.h"
#include "gameobject.h"
#include <iostream>

//Constructor
Background::Background()
{
    ...
}
//Methods
void Background::Update()
{
    ...
}
void Background::Render()
{
    ...
}
//Deconstructor
Background::~Background()
{
    ...
}

然而,问题来了,我在 Background 类中的任何函数都没有被调用。我不认为这可能是我的任何标题锁定的结果,但如果有人想查看它们,我可以添加它们。

编辑:解决了!(我需要记得标记这个很快解决)

class GameObject
{
    public:
        GameObject(void) = default;
        virtual void Update() =0;
        virtual void Render() =0;
        ~GameObject(void) = default;
};
class Background : public GameObject
{
    public:
        Background(void);
        virtual void Update();
        virtual void Render();
        ~Background(void);
    private:
        Texture texture;
};

标签: c++game-engine

解决方案


推荐阅读