Probleme beim map definieren
-
ich dachte immer beim insert musst du alle werte eingeben
du hast 3 paramenter aber im insert gibst du nur 2 anaber das kannst auch nicht sein, denn die fehlermeldung ist eine andere, du musst wirklich die anderen codezeilen mitangeben
-
Hallo,
das ist der einzig wichtige Code. Der Rest ist vollkommen unabhaengig und korrekt. Die Zeilennummerierung hab ich so frei gewaehlt und in der Fehlermeldung angepasst.
Sorry, gGlobals ist der namepspace in dem der Code steht.
map <int, int, less<int> > m1;
hier ist der dritte Parameter zur Festlegung der Sortierung und kein Wert.
Auch so gehts ausserdem nicht:
map <int, int> m1;
-
Wenn du den std namespace nicht angibst, dann schreib std::map
-
the_alien schrieb:
Wenn du den std namespace nicht angibst, dann schreib std::map
ich schreib doch:
using namespace std;
aber habs natuerlich probiert, auch std::map <int, int, less<int>> m1; bringt nichts.
-
krid schrieb:
the_alien schrieb:
Wenn du den std namespace nicht angibst, dann schreib std::map
ich schreib doch:
using namespace std;
aber habs natuerlich probiert, auch std::map <int, int, less<int>> m1; bringt nichts.Warum brauchst du denn den Sortierdinger? map<int, int> sortiert doch eh aufsteigend nach dem ersten int? oder was willst du mit dem less<int> erreichen?
-
krid schrieb:
the_alien schrieb:
Wenn du den std namespace nicht angibst, dann schreib std::map
ich schreib doch:
using namespace std;
aber habs natuerlich probiert, auch std::map <int, int, less<int>> m1; bringt nichts.abc.cpp(31): error C2371: 'gGlobals::m1' : redefinition; different basic types abc.cpp(31): error C2501: 'm1' : missing storage-class or type specifiers
Naja, allerdings kennt der Compiler std::map nicht wie es scheint...
-
So, hab das Problem (auch wenn ich immer noch nicht weiss woran es lag) geloesst, dadurch dass ich den code in ein anderes Modul verschoben habe.
Jetzt musste ich aber feststellen, dass das was ich vorhatte, damit gar nicht zu gehen scheint:
// definition von zwei (oder mehr) 2-dimensionalen CString Arrays CString hole[30][3]={ {"STANDARD","",""}, {"MEASUREMENT","",""}, {"MODEL_SCALE","",""}, }; CString text[30][3]={ {"SYMBOL_PROPERTIES_DIMENSION_STYLE","",""}, {"SYMBOL_PROPERTIES_TEXT_HEIGHT","",""}, {"SYMBOL_PROPERTIES_TEXT_STYLE","",""}, {"SYMBOL_PROPERTIES_TEXT_COLOR","",""}, {"SYMBOL_PROPERTIES_ARROW_SIZE","",""}, }; // Erstellung einer map, die diese Arrays beinhalten soll using namespace std; map<CString,CString[30][3]> opPages; typedef map<CString,CString[30][3]>::value_type valType; // Einfuegen der CString Arrays opPages.insert(gGlobals::valType(CString("HOLE"),hole)); opPages.insert(gGlobals::valType(CString("TEXT"),text));
Das Problem scheint daran zu liegen, dass die map keine Arrays enthalten kann.
Fehlermeldung:
C:\Program Files\Microsoft Visual Studio .NET\Vc7\include\utility(34): error C2536: 'std::pair<_Ty1,_Ty2>::std::pair<_Ty1,_Ty2>::second' : cannot specify explicit initializer for arrays
with
[
_Ty1=const CString,
_Ty2=ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char>>> [30][3]
]
and
[
_Ty1=const CString,
_Ty2=ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char>>> [30][3]
]Wie kann ich diese Daten denn sonst am besten speichern?
Ich bauche die CString Arrays von oben (bis zu 20 Stueck) sowie einen "Name" (hier 'HOLE') in einer "Variable, so dass ich auf alle Elemente anhand des Namens und des ersten Werts in den CString Arrays (z.B. "STANDARD") einzelend zugreifen kann?Nach der hier verwendeten Methode muesste es aber doch gehen, wenn ich Pointer auf die CString Arrays in die map speicher, oder?
-
Jap, sollte gehen.
-
Gibt es noch eine bessere (mehr C++ typische) Möglichkeit?
-
Was ist denn c++ typisch?
-
the_alien schrieb:
Was ist denn c++ typisch?
Ich meinte damit eine Methode ohne Arrays sondern irgendwie mit C++ Objekten wie Listen oder multimap. Habe damit aber bisher noch wenig Erfahrung.
-
boost::array ist ne gute möglichkeit
fühlt sich wie ein vector an, ist aber ein statisches array