这是我的容器:预计主要表达
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));
^~~~
函数必须查看变量是否已经存在(按名称),如果不存在,则将其插入到映射中。变量类用作不同类型值的容器。节点用于创建地图,而不用将实例化到某个专用变量的值。
尝试修复编译器错误是浪费时间。编译错误得到解决后,由于[对象切片],此代码无法工作(http://stackoverflow.com/questions/274626/what-is-object-slicing)。该地图包含“节点”。尝试将任何“Node”的子类插入到映射中时,都会将子类冲淡。 C++不是Java。 –
取出加下划线的单词'pair'。 (但是也读过Sam的评论) –
谢谢@SamVarshavchik,我不知道_object slicing_。我会研究这些基本错误。 –