这是代码。我收到以下错误:
In member function ‘void socks4Server::listener(int)’:
sock4.cpp:16:49: error: no matching function for call to ‘std::vector<boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp>>>::push_back(boost::asio::ip::tcp::socket*)’ sockets.push_back(new tcp::socket(io_service));
代码:
#include <iostream>
#include <vector>
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
using boost::asio::ip::tcp;
using namespace boost;
using namespace std;
class socks4Server{
public:
boost::asio::io_service io_service;
bool online;
void listener(int port){
tcp::acceptor accept(io_service,tcp::endpoint(tcp::v4(),port));
vector<shared_ptr<tcp::socket> > sockets;
while(online){
sockets.push_back(new tcp::socket(io_service));
cout<<"new socket thing";
}
}
socks4Server(int port){
online=true;
std::thread listen(&socks4Server::listener,this,port);
listen.detach();
}
};
int main(){
socks4Server server(8080);
}
最佳答案
没有从原始指针到共享指针的隐式转换,因此您不能直接将原始指针推送到共享指针 vector 上。使用以下其中一项:
sockets.push_back(shared_ptr<tcp::socket>(new tcp::socket(io_service)));
sockets.push_back(make_shared<tcp::socket>(io_service));
sockets.emplace_back(new tcp::socket(io_service)); // C++11 or later
此外,将 std
和 boost
转储到全局命名空间时要小心。两个命名空间中都定义了很多名称(例如shared_ptr
),因此这种不加区别的污染很可能会导致歧义。
关于c++ - 将 boost socket 存储在 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25394988/