gpt4 book ai didi

c++ - 使没有默认构造函数的类成为另一个类的私有(private)属性

转载 作者:行者123 更新时间:2023-11-30 02:00:12 26 4
gpt4 key购买 nike

我正在尝试制作一个使用 Boost 套接字进行操作的类,以使连接易于使用。
我的 SocketClient 类有一些属性,boost::asio::ip::tcp::socket 就是其中之一。但是我的构造函数中出现了 C2512 错误,因为 boost::asio::ip::tcp::socket 不能存在单元化,因为它没有构造函数。
在这里,查看类的代码:

class SocketClient {
private:
int port; //Port, currently unused
boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver::iterator endpoint_iterator;
boost::asio::ip::tcp::socket sock; //This causes the error
//It wants to be like this (impossible too):
//boost::asio::ip::tcp::socket sock(io_service);
public:
void init(const char*, const char* );
SocketClient(); //Default constructor
bool connect();
bool read(int bytes, char *text);
bool send(int length, char *text);
bool send(std::string text);
unsigned int timeout;
};

这是构造函数:

SocketClient::SocketClient() {  //ERROR: (23): error C2512: 'boost::asio::basic_stream_socket<Protocol>' : no appropriate default constructor available
sock=boost::asio::ip::tcp::socket(io_service); //Adding this didn't help
}

那怎么办?我是否必须将 sock 保留为 void*

最佳答案

使用initialization lists :

SocketClient::SocketClient() 
:
sock(io_service)
{
// Other initialization code here...
}

不过要小心:这是明确定义的,因为成员变量是按照它们在类定义中出现的顺序构造的,io_service出现在之前 socks 。如果不是这种情况,您会将未初始化的对象传递给 socket 的构造函数,很可能会导致未定义的行为。

关于c++ - 使没有默认构造函数的类成为另一个类的私有(private)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15420626/

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