gpt4 book ai didi

c++ - 错误 C2248: 'std::future::future':无法访问类 std::future 中声明的私有(private)成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:39 26 4
gpt4 key购买 nike

当我尝试编译此结构时出现错误 C2248:

struct LoadingWorldlet {
int x, z;
std::future<Worldlet> result;
};

我尝试将结果作为引用,但随后出现错误 C2512。当我修复该错误时,我会在 xutility 中得到 C2582。有什么方法可以修复第一个错误而不得到后两个错误,或者有什么方法可以同时修复后两个错误?

最佳答案

替换std::future<Worldlet>std::shared_future<Worldlet>可能会解决您眼前的编译问题。

但问题的根源在于您可能只想要 std::future 的一个消费者.您正在复制 struct某处,要求两个 future与同一来源绑定(bind) promise (或任何来源)。

std::future旨在将其数据一次传递给一个消费者。所以如果你想移动它,你必须 move它,而不是复制它。

根据您的错误猜测,您正在 MSVC2012 中编译。该编译器缺少自动移动构造函数和赋值构造函数创建。因此,请尝试添加显式移动构造函数和移动分配方法。

struct LoadingWorldlet {
int x, z;
std::future<Worldlet> result;
LoadingWorldlet(LoadingWorldlet&& o):x(o.x),y(o.y),result(std::move(o.result)) {}
LoadingWorldlet& operator=(LoadingWorldlet&& o) {
x = o.x;
y = o.y;
result = std::move(o.result);
return *this;
}
};

然后,避免隐式复制您的 LoadingWorldlet .

关于c++ - 错误 C2248: 'std::future<Worldlet>::future':无法访问类 std::future<Worldlet> 中声明的私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18274138/

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