【问题标题】:Storing boost sockets in vectors [closed]在向量中存储升压套接字[关闭]
【发布时间】:2014-08-20 00:22:36
【问题描述】:

这是代码。我收到以下错误:

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);
}

【问题讨论】:

    标签: c++ sockets boost vector boost-asio


    【解决方案1】:

    没有从原始指针到共享指针的隐式转换,因此您不能直接将原始指针推送到共享指针向量上。使用以下方法之一:

    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
    

    另外,将stdboost 都转储到全局命名空间时要小心。两个命名空间中都定义了很多名称(如shared_ptr),所以这种乱七八糟的污染很可能造成歧义。

    【讨论】:

    • 谢谢。这解决了问题。
    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多