簡體   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