我有一个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;视窗?
知道我可能做错了什么或错过了什么?
答案 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上使用的编译器会编译代码!