Mac无法编译,Windows和Linux确实 - Boost ASIO?

时间:2012-11-10 21:59:09

标签: c++ macos boost boost-asio

我有一个boost套接字实现,它在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&amp;视窗?

知道我可能做错了什么或错过了什么?

1 个答案:

答案 0 :(得分: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&> >没有匹配的构造函数(嗯,a更多扩展版本)。

在这种情况下的问题实际上不是为什么Mac上使用的编译器(clang?)不编译代码,而是为什么Windows和Linux上使用的编译器会编译代码!