我有gloox机器人。我正在尝试创建MUC房间处理程序,但现在我有错误,当我在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");
}但我弄错了
无法分配抽象类型为“”MucHandler“”的对象,因为以下虚函数在“”MucHandler“”/usr/include/gloox/muroomhandler.h:107中是纯函数。注意:虚的gloox::MUCRoomHandler::handlerMUCParticipantPresence(gloox::MUCRoom*,gloox::MUCRoomParticipant,const gloox::Presence&)
我不知道该如何修复它。有人能帮我吗?
发布于 2012-08-02 21:40:55
这意味着在MUCRoomHandler中有您没有在派生类MucHandler中实现的纯虚方法。所以,你必须实现它们。不能使用未实现的成员函数实例化对象。
具体来说,它提到了MUCRoomHandler中的这个方法
virtual void handlerMUCParticipantPresence(MUCRoom*,
MUCRoomParticipant,
const Presence&);您已经实现了这一点,这是不同的(请查看参数列表):
virtual void handleMUCParticipantPresence(MUCRoom * room,
const MUCRoomParticipant participant,
Presence presence){ } 为了清楚起见,我在其中删除了gloox名称空间。
由于您的handlerMUCParticipantPresence实现具有不同的参数类型,因此它不实现纯虚方法。这就是错误的来源。
发布于 2012-08-02 21:43:02
代码和错误消息之间有许多小的差异,所以这可能只是一个拼写错误,但是在错误消息中,handlerMUCParticipantPresence()接受Presence&作为最后一个参数,而您所展示的实现只是通过值接受Presence。如果确实是这样,那么您还没有正确地覆盖纯虚方法,因此您不能创建类的实例。
https://stackoverflow.com/questions/11778644
复制相似问题