Methodenaufruf eines variablen Objektes
-
Hallo,
nehmen wir mal an methode1() ist eine methode einer beliebigen klasse. Wort1, Wort2, Wort3 usw sind objekte dieser klasse. Nun möchte ich wissen, ob folgendes funktioniert:
cin >> wort; wort.methode1();Also ob der user bestimmen kann, von welchem objekt methode1() aufgerufen wird?
Hab momentan ein etwas kompliziertes konstrukt mit einer map und switch/case. Würd das aber gern vereinfachen, wenn so etwas möglich ist. Habe nämlich ziemlich viele objekte...
-
@ el primato
Nein, das ist nicht möglich. Du wirst wohl bei deinem Switch - Konstrukt bleiben müssen.Edit: Trollerei entfernt.
-
eine map mit key = Text und value = objekt wäre auch möglich.
-
Danke für die antworten.
@mapper: Das würde mich aber auch nicht weiterbringen. Ein switch oder if-konstrukt, das jedes objekt einzeln berücksichtigt ist trotzdem erforderlich.
-
Weißt du überhaupt was ne map ist?
-
mapper schrieb:
Weißt du überhaupt was ne map ist?
Naja, ich denke schon. Zumindest weiss ich, wie ich sie anwende

Kann natürlich sein, dass ich da ne entscheidende sache noch nicht weiß... Warum sagst du mir nicht, was du meinst?
-
Sowas
cin >> wort; theMap.find(wort).methode1();
-
Das funktioniert nicht
main.cpp: In function »int main()«: main.cpp:83: Fehler: »struct std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, cClass> >« hat kein Element namens »method1« /usr/include/c++/4.1.3/bits/stl_map.h: In member function »_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = cClass, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, cClass> >]«: main.cpp:66: instantiated from here /usr/include/c++/4.1.3/bits/stl_map.h:348: Fehler: keine passende Funktion für Aufruf von »cClass::cClass()« classes/cClass.h:6: Anmerkung: Kandidaten sind: cClass::cClass(std::string, std::string, int, int, int, int, int) classes/cClass.h:4: Anmerkung: cClass::cClass(const cClass&)
-
und der code dazu?
-
So in etwa:
map<string, cClass> mapname; cClass foo; mapname["wort"] = foo; cin >> wort; mapname.find(wort).method1();
-
Wie wäre es mit einem Funktionszeiger?
Edit:
Hatten wir erst letztens
http://www.c-plusplus.net/forum/viewtopic-var-t-is-204341-and-highlight-is-.html
-
el primato schrieb:
So in etwa:
map<string, cClass> mapname; cClass foo; mapname["wort"] = foo; cin >> wort; mapname.find(wort).method1();Und hat cClass ne Methode method1? Oben was noch methode1.
-
Ach
->second.method1()
-
mapper schrieb:
Und hat cClass ne Methode method1? Oben was noch methode1.
Die namen hab ich nur für das beispiel ein wenig abgeändert. Bei mir stimmt das alles.
Ach
->second.method1()Ich verstehe nicht ganz, was du mir damit sagen willst?
Das mit dem funktionszeiger werd ich mir mal angucken. Danke für den link.
-
mapname.find(wort)->second.method1()
-
mapper schrieb:
mapname.find(wort)->second.method1()
Aber meine map heisst doch "mapname". Wieso muss da second stehen, kannst du mir das bitte erklären?
Danke
-
-
die fehlermeldung oben besagt doch erstmal nur das: Deine Klasse cClass hat keinen standardkonstruktor (also einen ohne parameter). Objekte in einer map brauchen aber so einen.
-
mapper schrieb:
mapname.find(wort)->second.method1()
das ist ja gruselig, speicherzugriffsverletzung gleich eingebaut?
machs wenigstens so:std::map<string, cClass>::iterator iter = mapname.find(wort); if( iter != mapname.end() ) iter->second.method1();
-
thordk_ schrieb:
mapper schrieb:
mapname.find(wort)->second.method1()
das ist ja gruselig, speicherzugriffsverletzung gleich eingebaut?
[ausrede]
Anfangs hat er auch behauptet, er weiß wie man ne map anwendet, da dachte ich es reicht die Idee zu zeigen.
[/ausrede]