Methodenaufruf eines variablen Objektes
-
Sorry erstmal, dass ich das problem so lange liegen gelassen hab. Hatte in den letzten wochen keine zeit.
Maxi schrieb:
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.
Ja, soweit bin ich nun auch gekommen. Aber mein cClass hat einen standardkonstruktor mit parameter. Daher kann ich mir die fehlermeldung nicht erklären. Der konstruktor sieht so aus
cClass::cClass(string name, string description) { method2(name, description); }method1 (und method2 auch) kommen übrigens von einer elternklasse. Hats evtl damit was zu tun?
Ich hab mir inzwischen auch nochmal genau die map angeguckt. Ich machs genauso wie ihr es mir geschrieben habt bzw wie es in der c++ reference als beispiel steht. Aber es bleibt bei der fehlermeldung:/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:61: 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:7: Anmerkung: Kandidaten sind: cClass::cClass(std::string, std::string)
classes/cClass.h:5: Anmerkung: cClass::cClass(const cClass&)
make: *** [main] Fehler 1
-
Du mußt der Klasse aber einen parameterlosen Konstruktor verpassen (diesen nennt man Standard-Konstruktor), da die Map beim Operator[] einen neuen (leeren) Eintrag anlegt, wenn der Wert nicht gefunden wurde.
Alternativ kannst du auch deinen bisherigen Konstruktor mit Defaultparametern ausstatten, z.B.:
cClass::cClass(string name = string(), string description = string())
-
sorry, hat sich erledigt....