"对"之前的预期主要表达式
Expected primary expression before 'pair'
本文关键字:表达式 更新时间:2023-10-16
这是我的容器:
std::map<std::string, Node> idents
节点和变量类:
class Node {
};
template <class T> class Variable : public Node {
public:
T value;
Variable(T arg) : value(arg) { }
~Variable();
};
我有这个功能:
void assignment( const char * name, const char * val ) {
if( identifier_exists( name ) )
printf( "exist" );
else {
try { // Assume `val` is a number
double num = std::stod( val );
auto variable = new Variable<double>( num );
idents.insert( std::pair<std::string, Variable<double>> pair( std::string( name ), variable ) );
} catch ( const std::invalid_argument& ) { // It's a string
auto variable = new Variable<std::string>( val );
idents.insert( std::pair<std::string, Variable<std::string>> pair( std::string( name ), variable ) );
}
}
}
编译时出现此错误:
node.cpp:20:62: error: expected primary-expression before ‘pair’
idents.insert( std::pair<std::string, Variable<double>> pair( std::string( name ), variable ) );
^~~~
node.cpp:23:67: error: expected primary-expression before ‘pair’
idents.insert( std::pair<std::string, Variable<std::string>> pair( std::string( name ), variable ) );
^~~~
该函数必须查看变量是否已存在(按名称),如果不存在,则将其插入到映射中。变量类充当不同类型值的容器。Node 用于创建映射,而无需将值实例化为某些专用变量。
这里有几个问题:
-
您正在尝试插入指针(变量 = new Variable<....>),但地图不接受指针。您可能需要
std::map<std::string, Node*> idents;
。通过在映射中使用指针,您还可以避免否则会面临的对象切片问题 -
您的插入内容应看起来像
idents.insert( std::pair<std::string, Node*>(name, variable ) );
(即使用节点指针并删除多余的pair
)
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 使用正则表达式regex_search在字符串中查找字符串
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 概念中的cv限定符需要表达式参数列表
- 为什么constexpr的性能比正常表达式差
- 对于结构,表达式必须是可修改的ivalue
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 将fold表达式与std::一起用于两个元组
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- 标记 '","' 之前的预期主表达式
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 带有用户定义类的c++折叠表达式
- 即使使用调试编译标志,表达式也是"optimized out"
- holeMenuProgram.cpp:38:1 错误:'}'令牌之前的预期主表达式
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- 这 4 个 lambda 表达式之间有什么区别?