Das ist mein Behälter:Erwartete primären Ausdruck vor 'Paar'
std::map<std::string, Node> idents
Knoten und Variable Klassen:
class Node {
};
template <class T> class Variable : public Node {
public:
T value;
Variable(T arg) : value(arg) { }
~Variable();
};
Und ich habe diese Funktion:
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));
}
}
}
ich das bekommen Fehler beim Kompilieren:
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));
^~~~
Die Funktion muss suchen, wenn die Variable bereits existiert (namentlich) und falls nicht, sie in die Karte einfügen. Die Variablenklasse dient als Container für verschiedene Arten von Werten. Knoten dient dazu, die Karte zu erstellen, ohne den Wert für eine bestimmte Variable instanziieren zu müssen.
Der Versuch, beheben Sie den Compiler-Fehler ist eine Verschwendung von Zeit. Nachdem der Kompilierungsfehler behoben wurde, wird dieser Code wegen [object slicing] (http://stackoverflow.com/questions/274626/what-is-object-slicing) sowieso nicht funktionieren. Die Karte enthält 'Node's. Wenn Sie versuchen, eine Unterklasse von 'Node' in die Map einzufügen, wird die Unterklasse in den Drain- Bereich verschoben. C++ ist nicht Java. –
das unterstrichene Wort 'Paar' herausnehmen. (Aber lesen Sie auch Sams Kommentar) –
Vielen Dank, @SamVarshavchik, mir war nicht bewusst, dass _object slicing_. Ich werde auf diese grundlegenden Fehler eingehen. –