如何制作它,以便我可以将一个类的指针传递给从第一个类声明的另一个类

问题描述 投票:0回答:2

我正在开发一个简单的游戏引擎,目前我有一个只包含整个游戏的类,在这个类中我声明了其他类(例如 Window、ErrorManager 等)。现在的问题是我想从另一个实例访问一个实例,因此例如我想从仍在游戏类中声明的 Window 实例访问游戏类中声明的 ErrorManager 实例。

我的第一个想法是,当游戏创建时,你必须传递一个指向其实例的指针,然后该实例指针将被传递给所有需要处理游戏类内实例的类,事情是这样的我不能这样做,因为我必须在 Window 类中包含 Game 类,但这会创建一个包含循环,并且编译器只会向我吐出一个错误。

有什么方法可以实现我认为的解决方案,或者有更好的整体方法来解决这个问题吗?

c++ class
2个回答
0
投票

是的。您应该使用前向声明。

初始化对象时,将它们传递给其他对象的指针。如果每个类有一个 h 文件和一个 cpp 文件(通常是这样),请在 h 文件中声明初始化方法,并在 cpp 文件中定义它。要声明一个方法,您只需要一个类的前向声明。要定义它,您需要包含必要的 h 文件,但这不是问题。


0
投票

使用前向声明来打破循环。

托管.h

#ifndef MANAGED_H
#define MANAGED_H
class manager;  // forward declaration
class managed
{
    manager * mgr;
    managed(manager * mgr) : mgr(mgr)
    {
    }
};

#endif

经理.h

#ifndef MANAGER_H
#define MANAGER_H
#include "Managed.h"
class manager
{
    managed mgd;
    manager(): mgd(this) // note: Slightly dodgy managed::managed must NOT do 
                         // anything other than store this because this hasn't 
                         // been fully constructed yet
    {
    } 
};

#endif

托管.cpp

#include "managed.h"
#include "manager.h"

// can safely include and use public portions of manager here
© www.soinside.com 2019 - 2024. All rights reserved.