簡體   English   中英

繼承類中的前向聲明和訪問成員函數

[英]Forward Declaration and Accessing member functions in an inherited class

我正在構建一個簡單的組件架構,並且一直在努力解決前向聲明的問題

組件架構構建如下

組件類:

#pragma once
    class GameObject;

    class Component
    {
    public:
        Component();

        virtual ~Component();

        virtual void Start();

        virtual void Update(float _fDeltaTime);

        template<typename T>
        T* GetComponent()
        {
            T* c = m_GameObject->GetComponent<T>();
            return c;
        }

        GameObject& GetGameObject(); 

        void SetGameObject(GameObject& go);

    private:
        GameObject* m_GameObject;
    };

游戲對象類

class GameObject
    {
    public:
        GameObject(std::string name);

        ~GameObject();

        template<typename T>
        T* GetComponent()
        {
            for (auto i : m_vecComponents)
            {
                T* c = dynamic_cast<T*>(i);

                if (c != nullptr)
                {
                    return c;
                }
            }
            return nullptr;
        }

        void AddComponent(std::string _strComponentName);

        void Start();

        void Update(float _fDeltatime);

    private:
        std::string m_Name;
        std::vector<Component*> m_vecComponents;
    };

示例繼承組件,精靈渲染器

class SpriteRenderer : public Component
{
public:
    SpriteRenderer();
    ~SpriteRenderer();

    void Start() override;
    void Update(float _fDeltaTime) override;

    void ChangeTexture(bool _bTextured);
    void SetColor();


private:
    Shader* m_pShader;
    Texture* m_pTexture;

    int m_iWidth;
    int m_iHeight;

    unsigned int m_iVAO;
    unsigned int m_iVBO;
    unsigned int m_iEBO;

    std::vector<float> m_vecVertices;
    std::vector<unsigned int> m_vecIndices;

    // Bools To Control Rendering
    bool m_bTexture;
};

這些文件都有一個關聯的 cpp 文件

問題是我需要能夠從 Sprite Renderer 類中的游戲對象獲取組件,這會導致問題,因為我只有前向聲明的游戲對象,所以我無法訪問這些成員函數。

我嘗試過的事情

  • 將 GameObject.h 文件添加到 Component.cpp 文件
  • 直接從 Sprite Renderer 組件訪問 GameObject 指針

這些解決方案都沒有奏效,所以我能得到任何幫助將不勝感激

問題是 SpriteRenderer.cpp 沒有包含 GameObject.h

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM