Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我的gloox机器人出了错_C++_Bots_Chatroom_Gloox - Fatal编程技术网

C++ 我的gloox机器人出了错

C++ 我的gloox机器人出了错,c++,bots,chatroom,gloox,C++,Bots,Chatroom,Gloox,我有格洛克斯机器人。我试图创建MUC-room处理程序,但现在我犯了一个错误,当我在gcc下编译它时 class MucHandler : public MUCRoomHandler { private: Client *client; public: MucHandler(Client *cl){ client = cl; } virtual void handleMUCMessage (MUCRoom *room, const Message

我有格洛克斯机器人。我试图创建MUC-room处理程序,但现在我犯了一个错误,当我在gcc下编译它时

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("example3@gmail.com","example3","home");
}
但我错了

无法分配抽象类型为“muchHandler”的对象 因为以下虚拟函数在“muchHandler”中是纯函数 /usr/include/gloox/mucroomhandler.h:107:note虚拟void gloox::mucroomhandler::handlerMUCParticipantPresence(gloox::MUCRoom*,gloox::MUCRoomParticipant,const gloox::Presence&)


我不知道怎么修。有人能帮我吗?

这意味着
MUCRoomHandler
中有一些纯虚拟方法,您还没有在派生类
muchHandler
中实现它们。所以,你必须实现它们。不能用未实现的成员函数实例化对象

具体来说,它在
MUCRoomHandler
中提到了此方法:

virtual void handlerMUCParticipantPresence(MUCRoom*,
                                           MUCRoomParticipant, 
                                           const Presence&);
您已经实现了这一点,这是不同的(请查看参数列表):

为了清晰起见,我删除了
gloox
名称空间


由于
handlerMUCParticipantPresence
的实现具有不同的参数类型,因此它没有实现纯虚拟方法。这就是错误的来源。

代码和错误消息之间有一些微小的差异,因此这可能只是一个输入错误,但在错误消息中,
handlerMUCParticipantPresence()
Presence&
作为最终参数,而您显示的实现只是通过值获取一个
状态。如果确实是这样,那么您没有正确地重写纯虚方法,因此无法创建类的实例

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