map lässt sich nicht ausgeben.
-
asc schrieb:
Wäre schön wenn du dir wenigstens mein Beispiel angeschaut hättest. Dann würdest du vielleicht auch verstehen...
Ich finde es ja nett das ihr mir helfen wollt, aber damit eher nicht. Ich studiere jetzt auch schon über 2 Jahre Informatik und weiß schon wie ich vorzugehen habe, wenn ich was nicht verstehe.
Und beim Programieren brauch ich persönlich immer Beispiele um es zu verstehen von dem her hab ich mir einigige beispiele angeschaut!!!!!!!daddy_felix schrieb:
lulu32 schrieb:
Ich habe es jetzt so gemacht, das müsste doch auch sauber programmiert sein?
Zeig doch mal die Fehlermeldungen, die der Compiler dazu ausgibt. Da sollte eigentlich drinstehen, wo die Fehler liegen.
1. Weißt du, was eine Referenz ist? Und weißt du, wie man ein Objekt "als Referenz" übergibt?
2. Du hast eine std::map<string, vector<string>> und keine std::map<string, vector<string>*>
1. Ich habe keinen Compilerfehler dabei "mymap["d"]-> "(will mymap["d"]->push_back("bbb") machen) schon garnichts kommt und da brauch ich nicht compilieren. Allerdings bei " mymap-> " kommen schon die vorschläge. Also habe ich hier wohl irgendwie ein pointer problem bzw. hab ich hier wahrscheinlich die map mit den pointern nicht verstanden, weil das ist hier für mich ein wenig komplizierter als bei integer.
2. wenn ich eine refernz habe, kann ich mit der referenz auf der variable ackern.. d.h.
int var =1; int &ref = var; ref = 2; cout << var << endl; // ausgabe 2genau das mach ich ja jetzt...
3. was ich aber will ist mit der map
int i = 1; int *pi = 0; pi = &i; cout << *pi << endl;function1(map<string,vector<string>> *mymap) { mymap["1"]->pushBack("bla"); } void main() { map<string,vector<string>> amap; function1(&amap); return 0; } //Fehler: //error C2107: Ungültiger Index, Dereferenzierung nicht zulässig. // Links von "->pushBack" muss sich ein Zeiger auf Klassen-/Struktur-/Union-//generischen Typ befinden.
-
lulu32 schrieb:
1. Ich habe keinen Compilerfehler dabei "mymap["d"]-> "(will mymap["d"]->push_back("bbb") machen) schon garnichts kommt und da brauch ich nicht compilieren. Allerdings bei " mymap-> " kommen schon die vorschläge. Also habe ich hier wohl irgendwie ein pointer problem bzw. hab ich hier wahrscheinlich die map mit den pointern nicht verstanden, weil das ist hier für mich ein wenig komplizierter als bei integer.
ohje... erstmal solltest du dich nicht blind auf die auto completion verlassen. Soviel, wie du vermutlich zwischen Pointer und Referenz hin- und hergesprungen bist, kommt Visual Assist da auch nicht hinterher.
Du musst einfach nur den Unterschied in der Verwendung von Pointer und Referenz lernen.
lulu32 schrieb:
2. wenn ich eine refernz habe, kann ich mit der referenz auf der variable ackern..
und wie genau machst du das? Also was ist richtig:
MyObject& ref = GetReference(); ref.DoSomething(); // das hier? ref->doSomething(); // oder das hier?[edit]
// Links von "->pushBack" muss sich ein Zeiger auf Klassen-/Struktur-/Union-//generischen Typ befinden.da steht es doch. das "Ding", was links von "->pushBack" steht, muss ein Zeiger sein. Das ist es aber bei dir nicht.
Überleg doch mal, welchen Typ das "Ding" hat, das bei "myMap["1"]" rauskommt...
-
lulu32 schrieb:
Und beim Programieren brauch ich persönlich immer Beispiele um es zu verstehen von dem her hab ich mir einigige beispiele angeschaut!!!!!!!
"Jeder soll nach seiner Façon glücklich werden":
void function1(map<string,vector<string>> *mymap) { (*mymap)["1"].push_back("bla"); // 1 mymap->operator[]("1").push_back("bla"); // 2 }
-
Furble Wurble schrieb:
lulu32 schrieb:
Und beim Programieren brauch ich persönlich immer Beispiele um es zu verstehen von dem her hab ich mir einigige beispiele angeschaut!!!!!!!
"Jeder soll nach seiner Façon glücklich werden":
void function1(map<string,vector<string>> *mymap) { (*mymap)["1"].push_back("bla"); // 1 mymap->operator[]("1").push_back("bla"); // 2 }Vielen Dank jetzt kann ich auch mal anfangen es zu verstehen

Jetzt aber noch zu meiner Verteidigung was, wenn ich einen function(vector<string> *avector) dann kann ich avector->push_back() machen. Das verwirrt mich so..
Aber dadruch mymap->operator[]("1").push_back("bla"); ist es mir jetzt klar geworden
vielen dank

-
lulu32 schrieb:
Jetzt aber noch zu meiner Verteidigung was, wenn ich einen function(vector<string> *avector) dann kann ich avector->push_back() machen. Das verwirrt mich so..
Wenn du einen Pointer hast, nimmst du "->". Ansonsten ".".
Eigentlich ganz einfach

-
lulu32 schrieb:
asc schrieb:
Wäre schön wenn du dir wenigstens mein Beispiel angeschaut hättest. Dann würdest du vielleicht auch verstehen...
Ich finde es ja nett das ihr mir helfen wollt, aber damit eher nicht. Ich studiere jetzt auch schon über 2 Jahre Informatik und weiß schon wie ich vorzugehen habe, wenn ich was nicht verstehe...
Ich habe wiederum Probleme wenn man eine Zeile Code die man geliefert bekommt nicht einmal ausprobiert, und das gleiche wie zuvor schreibt. Das hat auch nichts mit der Dauer zu tun, wie lange man sich damit auseinander setzt.
Unabhängig davon: Warum überhaupt immer Zeiger? Warum keine Referenzen etc?
Sind die Daten optional, dann akzeptiere ich in einem Funktionskopf Zeiger, wenn nicht will ich wenigstens die Gründe für die Zeiger wissen. Wenn du etwas als Zeiger übergibst, so kann man ohne weiteres auch einen 0-Zeiger übergeben. Und wenn man dies in der Funktion nicht abprüft (und sei es wenigstens im Debugmodus mit Mechanismen wie assert) wird man ganz schnell eine Zugriffsverletzung ernten wenn man doch mal die Funktion falsch verwendet.
Eine Referenz kann man zwar auch ungültig machen, dies muss man aber eigentlich schon mutwillig tun. Es ist zumindest schwerer. Und Referenzen deuten eindeutig darauf das man hier ein Objekt erzwingt. Zudem erleichtert es die Schreib- und Denkweise.