1

私はブーストソケットの実装を持っており、それはWindowsとLinuxで完全に機能しますが、Macでは同じコードに次のようなコンパイルエラーがたくさん発生します。

src/modules/socket/ssl_tcp_socket_binding.cpp: In constructor 
'ti::SecureTCPSocket::SecureTCPSocket(tide::Host*, ti::TCPSocketBinding*)':
src/modules/socket/ssl_tcp_socket_binding.cpp:27: error: class 'ti::SecureTCPSocket' does not have any field named 'Socket'
src/modules/socket/ssl_tcp_socket_binding.cpp:29: error: no matching function for call to 'ti::Socket<boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&> >::Socket()'

コンストラクタ

SecureTCPSocket::SecureTCPSocket(Host *host, TCPSocketBinding * tcp_socket_binding)
        : Socket(host, string("Socket.SecureTCPSocket")),

ヘッダ

class SecureTCPSocket
        : public Socket<boost::asio::ssl::stream<tcp::socket&> >
    {

これがMacの問題である理由がわかりませんが、LinuxとWindowsでは完全に問題ありませんか?

私が間違っていることや行方不明になっている可能性があることについて何か考えはありますか?

4

1 に答える 1

2

現在実装しているものとは異なるクラス テンプレートに言及する場合は、テンプレート引数を指定する必要があります。コピー&ペーストエラーでない限り、使用する必要があります

SecureTCPSocket::SecureTCPSocket(Host *host, TCPSocketBinding * tcp_socket_binding)
    : Socket<boost::asio::ssl::stream<tcp::socket&> >(host,
                                                      string("Socket.SecureTCPSocket")),
      ...

実際、エラーメッセージはその必要性を示しています。それは、何が何であるかがわからないことを示しておりSocket、インスタンス化に一致するコンストラクターがないことを示し続けていますSocket<boost::asio::ssl::stream<tcp::socket&> >(まあ、そのより拡張されたバージョン)。

この場合の問題は、Mac で使用されるコンパイラ (clang?) がコードをコンパイルしない理由ではなく、Windows と Linux で使用されるコンパイラがコードをコンパイルする理由です!

于 2012-11-10T22:38:29.167 に答える