命名空间:如果没有对象,就无法调用成员函数

时间:2019-04-29 10:14:30

标签: c++

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

所以我在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,但是什么也没有...

2 个答案:

答案 0 :(得分:3)

void pushEvent(Event *event);

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

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

static void pushEvent(Event *event);

答案 1 :(得分:1)

您需要先创建对象,然后再使用它。

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

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

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