Ich versuche, ein std::unordered_map
mit einer enum class
als Schlüssel und eine definierte Klasse wie das referenzierte Objekt zu definieren:std :: unordered_map Enum mit und definierte Klasse
std::unordered_map<Dimension, unit, EnumClassHash> SI_Dim;
SI_Dim[Dimension::MASS] = BaseSIUnits::kilogram;
Dimension
ist ein enum class
in einem separaten erklärt Header-Datei als
enum class Dimension{MASS, TIME, LENGTH, TEMPERATURE, CURRENT, QUANTITY, ANGLE, FORCE, ENERGY, POWER,
AREA, VOLUME, NONDIMENSIONAL};
mit EnumClassHash
als Hash-Funktion (die ich den Code für Beiträge schreiben kann, wenn es relevant ist).
BaseSIUnits::kilogram
ist ein paar Zeilen darüber, wie
const unit BaseSIUnits::kilogram = unit(1, "kg", Dimension::MASS);
definiert, die gerade fein kompiliert. Aber die SI_Dim[Dimension::MASS] = BaseSIUnits::kilogram;
Zeile gibt mir einen Fehler. In QtCreator (meine IDE) heißt es "erwartet eine Deklaration" und g ++ gibt den Fehler "SI_Dim nennt keinen Typ". Für mich ergibt das keinen Sinn. Wenn man sich die Zeile in QtCreator ansieht, wird weder Dimension::MASS
noch BaseSIUnits::kilogram
hervorgehoben (fast so, als ob sie nicht erkannt würden, obwohl ich weiß, dass sie es sind). Ich habe nicht viel Erfahrung mit std :: unordered_map, also ist dies wahrscheinlich ein einfacher Syntaxfehler, der mir fehlt. Aber die Syntax sieht auf der Grundlage von Beispielen, die ich mir angeschaut habe, richtig aus.
Sorry, ich denke die Frage ist hier nicht klar. Meine Frage ist, ob es einen offensichtlichen Syntaxfehler gibt, der die Kompilierung des Codes verhindert. –
Haben Sie diese Zeile 'SI_Dim [Dimension :: MASS] = BaseSIUnits :: Kilogramm;' außerhalb einer Funktion? Sie können nicht nur willkürlichen Code im Namespacebereich haben. – Praetorian
Ich habe es außerhalb einer Funktion. Ich möchte, dass der Container unordered_map von anderen Dateien aus zugänglich ist. Wie mache ich das? –