编译含std::variant的C++代码时遭遇ISO C++语法错误
解决编译错误的方案
错误原因分析
编译错误的核心原因是代码中使用了std::string但未包含对应的头文件<string>。C++标准库中std::string的定义位于<string>头文件内,编译器找不到该头文件时,无法识别std::string类型,进而触发后续的语法错误提示。
修正后的代码
#include <stdio.h> #include <string> // 新增:包含std::string所需的头文件 #include <variant> int main() { enum class TokenType { FOO, BAR, }; using ConstTokenValue = const std::variant<std::string, int>; using ConstTokenType = const TokenType; return 0; }
额外说明
- 关于
using ConstTokenValue = const std::variant<std::string, int>:这种写法是合法的,const修饰的是整个std::variant类型,最终得到的是不可修改的std::variant类型别名。 - 原代码中的
ConstTokenType声明本身没有问题,错误完全由缺少<string>头文件引发。
内容的提问来源于stack exchange,提问作者eat3r
相关产品推荐
相关产品推荐

