【问题标题】:How to assign a value to std::variant?如何为 std::variant 赋值?
【发布时间】:2020-09-02 10:47:44
【问题描述】:

我正在尝试为简单的std::variant 赋值

#include <variant>

using namespace std;

int main() 
{
    variant<int, double> v;
    v = 12; //error
    v = 12.0; //error
}

我希望它可以编译,

g++ main.cpp

但我收到此错误:

没有操作符“=”匹配这些操作数——操作数类型是:std::variant = int

我尝试用union 替换它,但只有在我指定要写入的字段时,联合才有效,如下所示:

union number {
    int i;
    double d;
};

int main() 
{
    number n;
    n.i = 10; //OK
    n = 2.5; //error
}

如何正确分配变体?

我系统当前的 g++ 版本:

g++ --version
g++ (Ubuntu 9.3.0-10ubuntu2) 9.3.0

【问题讨论】:

  • 您确定您使用的是 C++17 及更高版本的编译器吗?
  • 无法重现:您的原始代码在我看来是正确的。
  • 刚刚进行了编辑
  • 单行检查您的 g++ 版本默认为哪个 C++ 标准:echo __cplusplus | g++ -E -x c++ - | tail -n 1。你可能会be 201402L
  • 您应该已经阅读了编译器的完整输出,从第一个错误开始:test.cpp:7:5: error: ‘variant’ was not declared in this scope 和以下note: ‘std::variant’ is only available from C++17 onwards

标签: c++ c++17


【解决方案1】:

你必须将 C++ 标准传递给编译器

g++ -std=c++17 main.cpp

gcc 9.3.0 的默认标准是 C++14,不支持变体。

【讨论】:

    猜你喜欢
    • 2020-10-24
    • 1970-01-01
    • 2021-03-25
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多