【发布时间】: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。你可能会be201402L。 -
您应该已经阅读了编译器的完整输出,从第一个错误开始:
test.cpp:7:5: error: ‘variant’ was not declared in this scope和以下note: ‘std::variant’ is only available from C++17 onwards