【问题标题】:Error C2248 cannot access private member declared in class 'boost::asio::basic_io_object<IoObjectService>错误 C2248 无法访问在类 'boost::asio::basic_io_object<IoObjectService> 中声明的私有成员
【发布时间】:2014-07-08 13:47:48
【问题描述】:

我有一个以 boost socket 作为成员的简单类,我试图将 IP 地址传递给它的构造函数,这给了我编译错误。

Error 2 error C2248: 'boost::asio::basic_io_object<IoObjectService>::basic_io_object' : cannot access private member declared in class 'boost::asio::basic_io_object<IoObjectService>' 

但是,如果我从它的构造函数中删除 std::string ip 参数,它就可以正常工作。 知道为什么它没有编译

class TestConnection 
{
private:
    boost::asio::ip::tcp::socket tcp_socket_;
public:
    TestConnection(boost::asio::io_service &io, std::string ip):tcp_socket_(io)
    {

    }
    ~TestConnection()
    {
    }
};

int main()
{
        boost::asio::io_service io_service;
        std::string test_ip = "192.168.1.10";
        TestConnection testconn = TestConnection(io_service, test_ip);
}

【问题讨论】:

    标签: c++ sockets boost boost-asio


    【解决方案1】:

    TestConnection testconn = TestConnection(io_service, test_ip);

    在上面的行中,您实际上尝试调用TestConnection 复制构造函数,这是不可用的,因为tcp_socket_ 成员是不可复制的。相反,您可以按如下方式编写该行:

    TestConnection testconn(io_service, test_ip);
    

    【讨论】:

    • 你能说出为什么当我删除额外的 std::string 参数时它会起作用吗?
    • @Pritesh Acharya,这是 MSVC 中的非标准扩展。尝试使用 GCC 编译,两种情况都会失败。
    猜你喜欢
    • 1970-01-01
    • 2014-01-10
    • 2012-11-15
    • 2016-12-02
    • 1970-01-01
    • 2013-07-28
    • 2011-09-06
    • 2015-03-25
    相关资源
    最近更新 更多