-2

次のソースを適切に書き換えるにはどうすればよいですか? これは、GLib を利用した IRC ボットの一部です。次のエラーでコンパイラがクラッシュします。

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
  }
}
4

1 に答える 1

3

ドキュメントによると、これはメンバー関数であるため、静的関数のように呼び出そうとしているときに、それを呼び出すには構築されたオブジェクトが必要です。

正しい修正は、オブジェクトを作成Gio::Resolverし、作成されたオブジェクトでこのメソッドを呼び出すことです。

于 2016-11-30T15:41:27.883 に答える