为什么下一个代码不编译?
Why next code does not compile?
如何正确重写下一个源代码?它是 GLib 驱动的 IRC-bot 的一部分。编译器因下一个错误而崩溃:
src/irc.cpp:20:9: error: cannot call member function ‘Glib::ListHandle<Glib::RefPtr<Gio::InetAddress> > Gio::Resolver::lookup_by_name(const Glib::ustring&, const Glib::RefPtr<Gio::Cancellable>&)’ without object
),
来源:
#include "includes.hpp" // Just including all the files
Glib::RefPtr<Gio::Socket> ircSock; // Our socket
void ircInit() { // Init-function
try {
ircSock = Gio::Socket::create( // Creating socket
Gio::SocketFamily::SOCKET_FAMILY_IPV4,
Gio::SocketType::SOCKET_TYPE_STREAM,
Gio::SocketProtocol::SOCKET_PROTOCOL_TCP
);
ircSock->connect( // Problematic code
Gio::InetSocketAddress::create(
Gio::Resolver::lookup_by_name(
"irc.freenode.net", // For-example
Gio::Cancellable::create()
),
6667
),
Gio::Cancellable::create()
);
} catch(const Glib::Error& e) {
std::cerr << "IRC: Error: " << e.what() << std::endl; // Error-reporting
}
}
根据documentation,这是成员函数,因此,您需要构造对象来调用它,而您试图像调用静态函数一样调用它。
正确的解决方法是创建 Gio::Resolver
对象,并在创建的对象上调用此方法。
如何正确重写下一个源代码?它是 GLib 驱动的 IRC-bot 的一部分。编译器因下一个错误而崩溃:
src/irc.cpp:20:9: error: cannot call member function ‘Glib::ListHandle<Glib::RefPtr<Gio::InetAddress> > Gio::Resolver::lookup_by_name(const Glib::ustring&, const Glib::RefPtr<Gio::Cancellable>&)’ without object
),
来源:
#include "includes.hpp" // Just including all the files
Glib::RefPtr<Gio::Socket> ircSock; // Our socket
void ircInit() { // Init-function
try {
ircSock = Gio::Socket::create( // Creating socket
Gio::SocketFamily::SOCKET_FAMILY_IPV4,
Gio::SocketType::SOCKET_TYPE_STREAM,
Gio::SocketProtocol::SOCKET_PROTOCOL_TCP
);
ircSock->connect( // Problematic code
Gio::InetSocketAddress::create(
Gio::Resolver::lookup_by_name(
"irc.freenode.net", // For-example
Gio::Cancellable::create()
),
6667
),
Gio::Cancellable::create()
);
} catch(const Glib::Error& e) {
std::cerr << "IRC: Error: " << e.what() << std::endl; // Error-reporting
}
}
根据documentation,这是成员函数,因此,您需要构造对象来调用它,而您试图像调用静态函数一样调用它。
正确的解决方法是创建 Gio::Resolver
对象,并在创建的对象上调用此方法。