【发布时间】:2020-10-25 23:31:42
【问题描述】:
我已经阅读了许多类似问题的答案,但仍然找不到解决我的问题的方法。
我有结构:
struct Param {
std::string name;
std::unique_ptr<Object> default_val;
};
我有一个类Function,它存储了一个Params 的向量。
我在某处创建了这个参数的向量并需要将其传递给Function 构造函数。
问题出在我试图将向量传递给构造函数的那一刻。
我知道我需要移动所有unique_ptrs,我做到了。
也许我错过了一些非常简单的事情?
Code snippets
Function:
using Params = std::vector<Param>;
class Callable : public Object {
public:
Callable(const Params & params) : params(params) {}
// ...
private:
Params params;
}
我创建向量的代码:
Params params;
for(auto & p : func_decl->params){
auto default_val = eval(p.default_val.get());
Param p(p.id->get_name(), std::move(default_val));
params.push_back(std::move(p));
}
这里可以不用shared_ptr吗?
输出是:
error: use of deleted function 'Param::Param(const Param&)'
【问题讨论】:
-
你还没有真正说出你的问题是什么。出了什么问题?请同时标记给出错误的确切行。
-
@cigien,对不起,我编辑了
-
尝试添加一个移动构造函数
Callable(Params && params)然后我认为它们将被移动(它将使用Param(const Param&)退出 -
您在哪一行得到错误? default_val 的类型是什么?能否提供minimal reproducible example!?
-
另外,使用
emplace_back而不是push_back
标签: c++ c++11 memory c++17 unique-ptr