2012-08-02 30 views
0

我有gloox Bot。我正在嘗試創建MUC房間處理程序,但現在我犯了錯誤,當我在gcc下編譯它時。我在gloox bot中犯了錯誤

class MucHandler : public MUCRoomHandler { 
private: 
    Client *client; 
public: 
    MucHandler(Client *cl){ 
     client = cl; 
    } 

    virtual void handleMUCMessage (MUCRoom *room, const Message &msg, bool priv){ 
    } 
    virtual bool handleMUCRoomCreation(MUCRoom *room) 
    { 
    } 
    virtual void handleMUCSubject(MUCRoom * /*room*/, const std::string& nick, const std::string& subject) 
    { 
    } 
    virtual void handleMUCInviteDecline(MUCRoom*, const JID& invitee, const string& reason){ 
    } 
    virtual void handleMUCError(MUCRoom*, StanzaError error){ 
    } 
    virtual void handleMUCInfo(MUCRoom * /*room*/, int features, const std::string& name, const DataForm* infoForm) 
    { 
    } 

    virtual void handleMUCItems(MUCRoom * /*room*/, const Disco::ItemList& items) 
    { 
    } 
    virtual void handleMUCParticipantPresence(MUCRoom * room, const MUCRoomParticipant participant,Presence  presence){ 

    } 
}; 


class Bot { 
private: 
    Client *client; 
    MUCRoom *room; 
    MucHandler *muc; 
public: 
    Bot(string login, string password, string resource){ 
     const string fullJidName = login + '/' + resource; 
     JID jid(fullJidName); 
     //mucroom 
     const string server = "conference.jabber.ru"; 
     const string uName = jid.username(); 
     const string roomJid = uName + "@" + server + "/" + uName; 
     JID roomJID(roomJid); 

     client = new Client(jid,password); 
     client->setPresence(Presence::Available, -1); 

     //mucRoom handler 
     muc = new MucHandler(client); 
     room = new MUCRoom(client, roomJID, muc, 0); 
     //room->registerMUCRoomHandler(muc); 
     // 

     client->connect(); 
    } 
    ~Bot(){ 
     delete client; 
     delete room; 
    } 

    void joinRoom(){ 
     room->join(); 
     room->getRoomInfo(); 
     room->getRoomItems(); 
    } 

    void setRoomNick(const string& nick){ 
     room->setNick(nick); 
    } 
    void invite(const string& inv, const string& reason) 
    { 
     JID invitee(inv); 
     room->invite(invitee, reason); 
    } 
}; 

int main(int argv, char** argc){ 
    Bot bot("[email protected]","example3","home"); 
} 

但是我有錯誤

因爲以下虛擬函數是「內MucHandler」 /usr/include/gloox/mucroomhandler.h:107純

不能分配抽象類型「Muchandler」 的目的:note virtual void gloox :: MUCRoomHandler :: handlerMUCParticipantPresence(gloox :: MUCRoom *,gloox :: MUCRoomParticipant,const gloox :: Presence &)

我不知道如何解決它。有誰能夠幫助我?

回答

1

這意味着MUCRoomHandler中存在純虛擬方法,您尚未在派生類MucHandler中實現此方法。所以,你必須執行它們。您不能實例化具有未實現成員函數的對象。

具體來說,它提到來自MUCRoomHandler這種方法:

virtual void handlerMUCParticipantPresence(MUCRoom*, 
              MUCRoomParticipant, 
              const Presence&); 

您已經實現了這一點,這是不同的(看參數列表):

virtual void handleMUCParticipantPresence(MUCRoom * room, 
              const MUCRoomParticipant participant, 
              Presence presence){ } 

,我已刪除了gloox命名空間爲清楚起見。

由於您的handlerMUCParticipantPresence實施有不同的參數類型,它沒有實現純虛方法。這是錯誤的來源。

+0

非常感謝你:) – Maria 2012-08-02 13:56:01

1

代碼和錯誤消息之間有一些細微差別,所以可能這只是一個錯字,但在錯誤消息中,handlerMUCParticipantPresence()需要Presence&作爲最終參數,而您顯示的實現只是按價值購買Presence。如果實際情況是這樣,那麼你沒有正確地重寫純虛擬方法,所以你不能創建你的類的一個實例。

相關問題