【发布时间】:2017-07-27 16:12:11
【问题描述】:
我有两个类,Messaging 和 GameObject。每个 GameObject 对象都有一个 Messaging 实例,我需要在 Messaging 中有一个函数指针指向 GameObject 中的一个函数。
此外,从 GameObject 派生的类中的对象也应该具有相同的属性(在其消息传递实例中具有指向其中的函数的函数指针)。
下面是代码,其中 GameCharacter 对象(从 GameObject 派生)提供要调用到其消息传递实例的函数:
messaging->Register(GameCharacter::DoMessage);
这是我的消息类代码:
/// Allows an object to send and receive messages.
class Messaging : public Component, public ::Messaging
{
private:
// Forward declaration of GameObject
class GameObject {};
// Define the OnMessageType as a function pointer to a function
// taking Message as parameter and returning void.
typedef void (GameObject:: *OnMessageType)(Message);
// OnMessage function pointer;
OnMessageType OnMessage;
public:
// Assign a function to the function pointer
void Register(OnMessageType func) { OnMessage = func; }
// Forward the Message to the function pointed to by the function pointer
void DoMessage(Message msg) { (this->*OnMessage)(msg); };
};
GameObject 类:
class GameObject
{
public:
/// Unique number used for identification
int id;
/// Reference to the graphical model displayed by this object
int modelReference;
/// GameObject children
std::vector<GameObject> children;
/// Constructor
GameObject();
/// Destructor
~GameObject();
/// Add a child GameObject node
void AddChild(GameObject child);
/// Update Object
virtual void Update();
/// Handles received messages
//virtual void DoMessage(Message msg);
// Provide pointers to all possible components
Components::Transform* transform;
Components::RigidBody* rigidBody;
Components::Messaging* messaging;
// Pointer to message queue
//std::vector<Message> *msgQueue;
private:
/// Send message
void SendMessage(Message msg);
};
GameObject 对象将使用 OnMessage 应该指向的函数调用 Register。然后当调用 DoMessage 时,应该调用 GameObject 中指向的函数。因此,在这种情况下,调用 DoMessage(在 GameCharacter 的消息传递实例中)应该依次调用 GameCharacter 对象中的 DoMessage。
问题是我在 DoMessage(Message msg) 函数上收到此错误:
指向成员类型'void的指针 (Components::Messaging::GameObject::)(Message)' 与 对象类型'Components::Messaging'
据我所知,它对指针函数类型的不满。我已经读过(在堆栈溢出帖子上),在调用指针函数时,应该指定成员函数所属的类型,但我找不到如何做到这一点......
任何人都可以对此有所了解并解释我如何修复我的代码吗?
【问题讨论】:
-
请发布 GameObject 类。
GameCharacter::DoMessage是静态函数吗? -
为什么不用EntityX或者anax组件系统库?
-
不,在 GameCharacter 类中它是一个私有成员函数。