我正在命名空间内创建一个事件队列,目标是可以从任何地方调用它(例如静态类函数)。
所以我在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,但是什么也没有...
答案 0 :(得分:3)
void pushEvent(Event *event);
这是一个非静态函数,没有对象就无法调用。
在某个地方,您应该有一个EventManager
的实例,并使用该实例来调用pushEvent()
如果希望能够在没有对象的情况下调用此函数,则需要将该函数标记为静态。
static void pushEvent(Event *event);
答案 1 :(得分:1)
您需要先创建对象,然后再使用它。
atreus::EventManager mgr;
mgr.pushEvent(event);
但是您还需要考虑对象的生存期。
最好使用EventManager的接口作为类成员,并将该类注入构造函数中。