這是我的容器:預計主要表達
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_。我會研究這些基本錯誤。 –