Es ist mein erstes Mal, C ++ STL auszuprobieren. Ich versuche ein multidimensionales assoziatives Array mit map zu erstellen. Zum Beispiel:
%Vor%Beim Kompilieren des obigen Codes in VS2005 habe ich 170 C4503-Warnungen erhalten. Alle Warnungen beziehen sich auf "Überschriebene Namenslänge überschritten, Name wurde abgeschnitten". Das Programm scheint jedoch gut zu laufen.
Wer möchte mir etwas Zeit lassen, um mir zu erklären, was diese Warnungen verursacht hat und wie löse ich sie? Vielen Dank im Voraus:)
%Vor%Wenn Sie beabsichtigen, dieses Monster mit einer Datenstruktur zu behalten, können Sie nur wenig über die Warnung tun, außer es zu deaktivieren:
%Vor%Ich bin kein Fan davon, die Warnung zu deaktivieren, denn nach meinen Recherchen könnte es unbeabsichtigte Konsequenzen aufgrund dieser Warnung geben, also ziehe ich es vor, wirklich auf das Problem zu verzichten.
So würde ich den Code umschreiben:
%Vor%und du könntest es so benutzen:
%Vor%Meine Bedenken und die ultimative Lösung stammen hauptsächlich von MSDN .
Andere haben vorgeschlagen, wie Sie die Warnung deaktivieren können. Ich schlage vor, dass Sie stattdessen Ihr Design überdenken. Verwenden Sie etwas mehr Abstraktion als map ^ 5. Oder ändern Sie die Datenstruktur des Speichers. Z.B. Benutze map anstelle von map ^ 5.
Aktualisiert:
Was ich meine ist, dass Sie im Grunde zwei Möglichkeiten haben:
Sie verwenden einen Schlüssel mit so vielen Strings / Ebenen, wie Sie benötigen:
struct Key3 { std::string x, y, z; };
typedef std::map<Key3, DA*> MyMap;
Oder Sie erstellen etwas generisches, wobei jede Ebene entweder den DA * -Wert und / oder eine andere Ebene enthalten kann.
Deklarieren Sie so (achten Sie auf fertige Zitate)
%Vor% C ++ erkennt >>
als Verschiebungsoperator.
Tags und Links string c++ stl map name-decoration