c++ - 使元组包含unique_ptr时出错

标签 c++ compiler-errors

我正在尝试创建一个函数func,该函数返回std::tuplestd::unique_ptr<A>double。但是,当我尝试创建元组时,出现错误。代码如下:


#include <tuple>
#include <memory>

class A {
public:
    A() : data (3){}
private:
    double data;
};

std::tuple<std::unique_ptr<A>, double> func(double num) {
    std::unique_ptr<A> a = std::make_unique<A>();
    std::tuple<std::unique_ptr<A>, double> temp = std::make_tuple(a, num); // ERROR MESSAGE C
    return temp;
}

int main() {
    return 0;
}

此代码在Visual Studio中产生以下4个错误。
错误讯息A:
tuple(827,18): error C2440: '<function-style-cast>': cannot convert from 'initializer list' to '_Ttype'
错误消息B:
tuple(825,83): message : No constructor could take the source type, or constructor overload resolution was ambiguous
错误消息C:
Source.cpp(14): message : see reference to function template instantiation 'std::tuple<std::unique_ptr<A,std::default_delete<A>>,double> std::make_tuple<std::unique_ptr<A,std::default_delete<A>>&,double&>(std::unique_ptr<A,std::default_delete<A>> &,double &)' being compiled
错误消息D:
tuple(827,12): error C2064: term does not evaluate to a function taking 2 arguments
首先,此错误的原因是什么?其次,与A关联的a是否放置在堆中?

最佳答案

std::unique_ptr不可复制。您正在尝试将std::unique_ptr复制到元组,但这将不起作用。编译器错误消息是一种含糊的IMO,但这基本上是问题所在。
但是,std::unique_ptr是可移动的,因此可以使用std::move:std::tuple<std::unique_ptr<A>, double> temp = std::make_tuple(std::move(a), num);

关于c++ - 使元组包含unique_ptr时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64247216/

相关文章:

c++ - decltype 与具有默认参数的函数模板会产生困惑的结果(一个有趣的问题或 gcc 的错误)

c++ - OpenCV 示例程序 lkdemo

ios - 如何在 SceneKit : consecutive statements on a line must be separated by ;? 中写入新的着色器文件

c++ - 涉及 `crti.o` 和 `crt1.o` 的奇怪链接器错误

c++ - 什么是模板扣除指南,我们应该在什么时候使用它们?

c++ - 一遍又一遍地重新定义变量是否会增加内存?

C 编译器错误 - 警告 : Assignment makes integer from pointer without a cast | Error: Subscripted value is neither array nor pointer

javascript - 代码在不同环境下的表现不同

c++ - 无法在 Netbeans 中使用 WxWIdgets 构建测试应用程序

c# - 在 Linux 上的 c# 或 c++ 中修改文本文件并使用命令行参数执行程序