繁体   English   中英

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

[英]namespace: cannot call member function without object

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

所以我在 eventManager.h 中有命名空间

namespace atreus {
    class Event;

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

然后我尝试在另一个类中调用 pushEvent,例如:object.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 添加到一个类中并在命名空间内创建一个 EventManager eventManager 但什么都没有...

void pushEvent(Event *event);

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

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

static void pushEvent(Event *event);

您需要在使用它之前创建该对象。

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

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

最好使用 EventManager 的接口作为类成员并将类注入到构造函数中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM