Problem mit std::map
-
gruppe ist ein Zeiger, diesen musst du erst dereferenzieren.
-
Ist dir schon mal aufgefallen, dass gruppe zu einem ein
std::stringund zum anderen einTConfigListist?Gruß
-
Janjan schrieb:
gruppe ist ein Zeiger, diesen musst du erst dereferenzieren.
Wie macht man das richtig?
Weil*(gruppe)[name] = value;funktioniert nicht.
TConfigPair& ref = *gruppe; ref[name] = value;Das geht. Aber kann man das auch anders schreiben?
lg
-
(*gruppe)[name] = value;
-
f'ckw schrieb:
Janjan schrieb:
gruppe ist ein Zeiger, diesen musst du erst dereferenzieren.
Wie macht man das richtig?
Weil*(gruppe)[name] = value;Erst dereferenzieren, dann operator[] nutzen. Benutze runde Klammern, um die Reihenfolge zu ändern ([] hat höhere Priorität als *). Du machst es falsch, deine Klammern ändern rein gar nichts an der Reihenfolge. Bitte mitdenken.
theliquidwave schrieb:
(*gruppe)[name] = value;Sehr schön, am besten kaust du ihm auch gleich sein Essen vor.
-
theliquidwave schrieb:
(*gruppe)[name] = value;Vielen Dank

lg
-
Janjan schrieb:
Sehr schön, am besten kaust du ihm auch gleich sein Essen vor.
Aha. Normalerweise bin ich auch gegen solche Posts. Aber der Unterschied zwischen seiner und meiner Lösung ist offensichtlich. Warum das so funktioniert ist doch selbsterklärend...
Gruß
-
theliquidwave schrieb:
Janjan schrieb:
Sehr schön, am besten kaust du ihm auch gleich sein Essen vor.
Aha. Normalerweise bin ich auch gegen solche Posts. Aber der Unterschied zwischen seiner und meiner Lösung ist offensichtlich. Warum das so funktioniert ist doch selbsterklärend...
Wenn man es weiss, ja. Allerdings wenn es so offensichtlich ist, wieso hat er es dann nicht selbst schon gemacht? Womöglich weil es für ihn nicht so offensichtlich war?
Es ist immer gefährlich jemandem sowas einfach vorzulegen. Viele nicken mit dem Kopf, man hat das Gefühl, dass sie es verstanden haben, wenn man dann allerdings nachfragt, merkt man, dass überhaupt nichts klar wurde. Und die Gefahr ist leider gross, dass viele einfach nur Copy&Paste machen, wenn sie eine Lösung geliefert bekommen, statt sich nochmals Gedanken darüber zu machen, wieso dies nun die Lösung ist. Traurig, aber leider sieht man es immer und immer wieder, auch bei solchen offensichtlichen kleinen Dingen.
Grüssli
-
Muss euch nochmal belästigen.
So schauts momentan aus:
typedef std::map<std::string, std::string> TConfigPair; typedef std::map<std::string, TConfigPair*> TConfigList; TConfigList* findGroupByName(std::string gruppenname); void addConfigValue(std::string grpName, std::string name, std::string value) { TConfigPair* gruppe = findGroupByName(grpName); gruppe->insert(std::make_pair(name, value); }So hab ich das. Das Testprogramm stürzt aber beim insert mit einer Excpetion ab
Unhandled exception at 0x68c15fb1: 0xC0000005: Access violation reading location 0x00000014.
Ich verstehe ehrlich gesagt nicht warum.
Bitte um eure Hilfe nochmals.
Bin noch nicht so erfahren mit maps.
lg
-
Was gibt denn
findGroupByNamezurück? Womöglich einen Nullpointer? Debugger anwerfen und schauen gehen
Grüssli
-
Sorry, habe 3 überladene Funktionen die diesen Code beinhalten und in einer stand nicht gruppe = findGroup.. sondern nur das findGroup...
Typischer Fall von spät programmieren :D.
Danke *g*
lg