命名空间:不能在没有对象的情况下调用成员函数

namespace: cannot call member function without object

本文关键字:情况下 调用 成员 函数 对象 不能 命名空间      更新时间:2023-10-16

我正在命名空间内创建一个事件队列,目标是能够从任何地方调用它(如静态类函数(。

所以我在事件管理器中有一个命名空间。

namespace atreus {
    class Event;
    class EventManager {
      private:
        std::queue<Event *> events;
      public:
        void pushEvent(Event *event);
        bool pollEvent(Event *event);
    };
}

然后我尝试在另一个类中调用 pushEvent,如下所示:对象.cpp

inline void createEvent(sf::Vector2f& n, float penetration, sf::Vector2f velocity, float totalMass)
{
    atreus::Event *event;
    // adding stuff to event 
    atreus::EventManager::pushEvent(event);
}

然后我收到此错误:

cannot call member function ‘void atreus::EventManager::pushEvent(atreus::Event*)’ without object
 atreus::EventManager::pushEvent(event);

我尝试将函数 createEvent 添加到一个类中并在命名空间内创建一个事件管理器事件管理器,但什么都没有......

void pushEvent(Event *event);

这是一个非静态函数,没有对象就不能调用它。在某个地方,您应该有一个 EventManager 实例并使用该实例调用pushEvent()

如果您希望能够在没有对象的情况下调用此函数,则需要将此函数标记为静态。

static void pushEvent(Event *event);
您需要在使用

对象之前创建它。

atreus::EventManager mgr;
mgr.pushEvent(event);

但是您还需要考虑对象的生存期。

最好使用事件管理器的接口作为类成员,并在构造函数中注入类。