C++ C++;Boost:在构造函数之后初始化端点
我尝试创建一个使用UDP的类。我希望在构造函数之后初始化端点,因此我对其进行如下修改:C++ C++;Boost:在构造函数之后初始化端点,c++,boost,udp,boost-asio,endpoint,C++,Boost,Udp,Boost Asio,Endpoint,我尝试创建一个使用UDP的类。我希望在构造函数之后初始化端点,因此我对其进行如下修改: class UdpSender { private: boost::asio::ip::udp::endpoint endpoint; boost::asio::ip::udp::socket socket; string multicast_address; unsigned short multicast_port; boost::thread_group thr
class UdpSender
{
private:
boost::asio::ip::udp::endpoint endpoint;
boost::asio::ip::udp::socket socket;
string multicast_address;
unsigned short multicast_port;
boost::thread_group threads; // thread group
boost::thread* thread_main; // main thread
boost::thread* thread_listen; // listen thread
boost::thread* thread_getsend; // get/send thread
boost::mutex stopMutex;
bool initialize = false;
bool stop, showBroadcast;
int i_getsend, i_listen, i_main, i_message, interval;
string message;
public:
// constructor
UdpSender(boost::asio::io_service& io_service, std::string multicast_address, unsigned short multicast_port, int interval, bool show = false)
:
//endpoint(boost::asio::ip::address::from_string(multicast_address), multicast_port),
//socket(io_service, endpoint.protocol()),
multicast_address(multicast_address),
multicast_port(multicast_port),
interval(interval),
showBroadcast(show)
{
initialize = true;
Initialize(io_service);
}
UdpSender(boost::asio::io_service& io_service)
{
initialize = true;
Initialize();
}
// destructor
~UdpSender()
{
// show exit message
cout << "Exiting UDP Communicator." << endl;
}
// initialize
void Initialize(boost::asio::io_service& io_service)
{
if (initialize == false)
{
GetInfo();
}
boost::asio::ip::udp::endpoint endpoint(boost::asio::ip::make_address(multicast_address), multicast_port);
boost::asio::ip::udp::socket socket(io_service, endpoint.protocol());
socket.set_option(boost::asio::ip::udp::socket::reuse_address(true)); // no need
thread_main = new boost::thread(boost::ref(*this));
//thread_listen = new boost::thread(&UdpSender::Callable_Listen, this, interval, boost::ref(i_listen));
//threads.add_thread(thread_listen); // listen thread
thread_getsend = new boost::thread(&UdpSender::Callable_GetSend, this, interval, boost::ref(i_listen), boost::ref(message));
threads.add_thread(thread_getsend); // get/send thread
stop = false;
i_getsend = 0;
i_listen = 0;
i_main = 0;
i_message = 0;
message.clear();
initialize = true;
}
// ============ other things removed to shorten code ============
};
它也不喜欢新的构造函数:
//endpoint(boost::asio::ip::address::from_string(multicast_address), multicast_port),
//socket(io_service, endpoint.protocol()),
UdpSender(boost::asio::io_service& io_service)
我能做些什么使这一切成为可能?我真的很感谢你的帮助。谢谢。否,端点对象应通过其配置
但是,您可以通过[smart-]指针按住端点
,并在UdpSender
构造之后创建它
// defining:
private:
boost::shared_ptr<boost::asio::ip::udp::endpoint> endpoint;
// creating in Initialize()
endpoint = boost::make_shared<boost::asio::ip::udp::endpoint>(boost::asio::ip::address::from_string(multicast_address), multicast_port);
//定义:
私人:
boost::共享的ptr端点;
//在Initialize()中创建
endpoint=boost::make_shared(boost::asio::ip::address::from_string(多播_地址),多播_端口);
否,端点对象应通过其
但是,您可以通过[smart-]指针按住端点
,并在UdpSender
构造之后创建它
// defining:
private:
boost::shared_ptr<boost::asio::ip::udp::endpoint> endpoint;
// creating in Initialize()
endpoint = boost::make_shared<boost::asio::ip::udp::endpoint>(boost::asio::ip::address::from_string(multicast_address), multicast_port);
//定义:
私人:
boost::共享的ptr端点;
//在Initialize()中创建
endpoint=boost::make_shared(boost::asio::ip::address::from_string(多播_地址),多播_端口);
我尝试了那一行,抛出了这个错误:没有运算符“=”与这些操作数匹配。@CaTx请确保您的端点
定义正确。发布准确的编译错误。1。没有运算符“=”与这些操作数2匹配。二进制“=”:未找到任何运算符,该运算符采用“boost::shared_ptr”类型的右侧操作数(或没有可接受的转换)@CaTx,因此您未正确定义端点。应该是boost::shared\u ptr endpoint
我尝试了那一行,抛出了这个错误:没有运算符“=”匹配这些操作数。@CaTx请确保您的endpoint
定义正确。发布准确的编译错误。1。没有运算符“=”与这些操作数2匹配。二进制“=”:未找到任何运算符,该运算符采用“boost::shared_ptr”类型的右侧操作数(或没有可接受的转换)@CaTx,因此您未正确定义端点。它应该是boost::shared_ptr endpoint