【发布时间】:2021-12-07 16:56:07
【问题描述】:
我有一段代码,它给了我以下错误:
test.cpp:15:38: error: could not convert ‘std::ref<boost::asio::io_context>(((container*)this)->container::ioCtxt)’ from ‘std::reference_wrapper<boost::asio::io_context>’ to ‘A’
15 | std::array<A,2> bObjs = {std::ref(this->ioCtxt), nullptr};
| ~~~~~~~~^~~~~~~~~~~~~~
| |
| std::reference_wrapper<boost::asio::io_context>
test.cpp:15:61: error: could not convert ‘nullptr’ from ‘std::nullptr_t’ to ‘A’
15 | std::array<A,2> bObjs = {std::ref(this->ioCtxt), nullptr};
| ^
| |
|
这是产生相关错误的最小代码段。这段最小的代码是对更复杂情况的简单表示。
#include <boost/asio.hpp>
struct A
{
boost::asio::ip::tcp::socket sock;
A(boost::asio::io_context& ioCtxtFromContainer): sock(ioCtxtFromContainer){}
};
struct container
{
boost::asio::io_service ioCtxt;
std::array<A,2> bObjs = {std::ref(this->ioCtxt), nullptr};
};
int main(void)
{
container containerObj;
return 0;
}
将引用传递给 A 的构造函数的正确方法是什么?此处不允许/不可能使用向量或其他形式的动态内存分配。
【问题讨论】:
-
我认为你不能使用数组。您可以使用 vector 和 emplace 来代替,也可以使用单个变量成员。
-
@MarcStevens 更新了我的帖子。此处不允许使用向量或任何其他类型的动态内存分配。
-
你试过没有
std::ref吗? -
@SergeyKolesnik nullptr 仍然是问题。
-
这里开头
std::ref的目的是什么?
标签: c++ boost-asio