2012-08-02 3 views
0

나는 gloox Bot을 가지고 있습니다. MUC 룸 핸들러를 만들려고하는데, gcc에서 컴파일 할 때 실수가 있습니다.나는 내 gloox 봇에 실수를했습니다.

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("ex[email protected]","example3","home"); 
} 

그러나 나는이 실수로 다음과 같은 가상 함수는 'MucHandler' /usr/include/gloox/mucroomhandler.h:107 내에서 순수하기 때문에 'Muchandler' 추상 형식의 객체를 할당 할 수 없습니다

: 가상 무효 gloox :: MUCRoomHandler :: handlerMUCParticipantPresence (gloox :: MUCRoom *, gloox :: MUCRoomParticipant, const를 gloox :: 존재 &)

나는 전혀 모른다주의, 해결 방법을합니다. 아무도 나를 도울 수 있습니까?

답변

1

MUCRoomHandler에는 파생 클래스 MucHandler에 구현되지 않은 순수 가상 메서드가 있음을 의미합니다. 따라서 구현해야합니다. 구현되지 않은 멤버 함수를 사용하여 객체를 인스턴스화 할 수 없습니다.

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

당신은 다른 어떤이를 구현 한 (매개 변수 목록을보고) :

구체적으로는 MUCRoomHandler에서이 방법은 언급

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

나는 gloox 네임 스페이스를 제거한 경우 명확성을 위해.

handlerMUCParticipantPresence 구현에 다른 인수 유형이 있으므로 순수 가상 메서드가 구현되지 않습니다. 이것은 오류의 원인입니다.

+0

대단히 감사합니다. :) – Maria

1

코드와 오류 메시지 사이에는 약간의 차이가 있으므로이 오류는 오타 일 수 있지만 오류 메시지에서 handlerMUCParticipantPresence()Presence&을 최종 인수로 사용하지만 구현 값으로 Presence을받습니다. 실제로 해당되는 경우 순수 가상 메서드를 올바르게 재정의하지 않으므로 클래스 인스턴스를 만들 수 없습니다.

관련 문제