gpt4 book ai didi

c++ - Mac 无法编译,Windows 和 Linux 可以 - Boost ASIO?

转载 作者:行者123 更新时间:2023-11-30 04:23:29 25 4
gpt4 key购买 nike

我有一个 boost socket 实现,它在 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 上却完全没问题?

知道我可能做错了什么或遗漏了什么吗?

最佳答案

当你提到一个不同于你当前实现的类模板时,你必须指定模板参数。除非是复制粘贴错误,否则需要使用

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 上使用的编译器编译代码!

关于c++ - Mac 无法编译,Windows 和 Linux 可以 - Boost ASIO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13326475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com