c++ dynamische Strukturen
-
Dann schau mal, wie du die Methode GetName (die keine Parameter hat) aufrufst: GetName(). Und jetzt überleg, wie Du die Methode GetPerson (die auch keine Parameter hat) aufrufen müsstest

-
und achte bei der Benennung deiner Methoden auf konsistenz. Einmal hast du "GetName()" und einmal "getPerson()", entweder fang alles mit einem großen Buchstaben an oder alles mit einem kleinen.
-
Ich schau es mir gerade wieder und wieder an, aber ich versteh den Fehler einfach nicht. Ich möchte m_personen zurückgeben. Irgendwie scheint das nicht zu funktionieren, aber warum?
-
du solltest besser eine konstante Referenz zurückgeben, sonst wird jedesmal eine Kopie erzeugt. Der Name "getPerson" ist auch ungünstig, wenn du nciht eine einzelne Person, sondern eine ganze Liste haben möchtest

const std::vector<Person>& GetPersonen() const {return m_personen;};und anstelle von "mag nicht" wäre es hilfreich, wenn du uns die tatsächliche Fehlermeldung geben könntest...
-
Keine Chance, läuft trotzdem nicht. Es kommt die Fehlermeldung:
Fehler 2 error C2228: Links von ".size" muss sich eine Klasse/Struktur/Union befinden. m:\visual studio 2010\projects\einfacheliste\einfacheliste\main.cpp 45
6 IntelliSense: Ein Zeiger auf eine gebundene Funktion darf nur zum Aufrufen der Funktion verwendet werden. m:\visual studio 2010\projects\einfacheliste\einfacheliste\main.cpp 45
Hier nochmal der komplette Code:
#include <iostream> #include <string> #include <vector> using namespace std; class Person { public: explicit Person(const std::string& name) : m_name(name) {} const std::string& GetName() const {return m_name;}; private: std::string m_name; }; //------------------------------------------------------------------------ class Gruppe { public: explicit Gruppe(const std::string& name) : m_name(name) {} const std::string& GetName() const {return m_name;}; void AddPerson(const Person& person) {m_personen.push_back(person);}; const std::vector<Person>& getPersonen () const {return m_personen;}; private: std::string m_name; std::vector<Person> m_personen; }; //------------------------------------------------------------------------- int main() { std::vector<Gruppe> gruppen; gruppen.push_back(Gruppe("Frauen")); gruppen.push_back(Gruppe("Maenner")); gruppen[0].AddPerson(Person("Andrea")); gruppen[0].AddPerson(Person("Melli")); gruppen[1].AddPerson(Person("Thomas")); gruppen[1].AddPerson(Person("Felix")); for (int i=0; i<=gruppen.size(); i++) { cout<<gruppen[i].GetName()<<":"<<endl; for(int a=0; a<=gruppen[i].getPersonen.size(); a++) //Das kennt er nicht { cout<<gruppen[i].getPersonen[a].GetName()<<endl; //Das folglich auch nicht. } } cout<<endl; system("PAUSE"); return 0; }Es scheint noch immer an getPersonen zu liegen

-
Melanie_27 schrieb:
for(int a=0; a<=gruppen[i].getPersonen.size(); a++) //Das kennt er nicht { cout<<gruppen[i].getPersonen[a].GetName()<<endl; //Das folglich auch nicht. } }mit gruppen[i].getPersonen rufst du auch keine Methode auf.
Lies dir nochmal den letzten Kommentar von LordJaxom genau durch.
-
Manchmal sieht man die offensichtlichsten Fehler nicht

LordJaxom hat dir doch schon einen Hinweis gegeben:
Vergleiche mal die beiden Aufrufe:
gruppen[i].GetName() gruppen[i].getPersonen.size() // "getPersonen" ist eine Methode. Wie ist die korrekte Syntax für einen Methodenaufruf?
-
Ahhhhhhh Ich bin so dumm
Ich hab die () vergessen beim Aufruf

Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanke.
Leider funktioniert es trotzdem nicht. Es hängt sich dann auf.
Bestimmt wegen irgend einem Nullzeiger!!
-
Ok, ich hab die Schleife nur noch bis a<=gruppen[i].getPersonen().size()-1; laufen lassen und jetzt tut es. Bestimmt ist da sonst der Nullzeiger

Ich bin so glücklich. Was würde ich nur ohne euch machen.
-
Melanie_27 schrieb:
Ok, ich hab die Schleife nur noch bis a<=gruppen[i].getPersonen().size()-1
Schleifen über ein Array laufen generell von i = 0 bis i < size
