c++ dynamische Strukturen
-
Melanie_27 schrieb:
Hääh? Aber das was du gepostet hast, hat doch nichts mit m_personen zu tun? Ich möchte ja die Personen ausgeben, die eine Gruppe hat.
Wie geht das dann, wenn ich std::vector<Person> m_personen; in der Klasse Gruppe bei private stehen hab???Hast Du den Kommentar in felix' Code überlesen?

Wenn Du die Personen in einer Gruppe ausgeben möchtest, kannst Du doch eine Funktion "Ausgabe" in der Klasse Gruppe schreiben, die über den privaten Vector m_personen iteriert.
Oder Du bietest in der Klasse Gruppe eine Get-Methode für eine bestimmte Person (nach Index) oder den gesamten Vector an, und nutzt diese statt des privaten m_personen.
-
[offtopic]
Kaum ist ein Benutzername weiblich wird hier mit Code umsich geschmissen, wäre er männlich gewesen gäbe es mit sicherheiten schon die ein oder andere Moralpredigt
[/offtopic]
-
Cyres schrieb:
[offtopic]
Kaum ist ein Benutzername weiblich wird hier mit Code umsich geschmissen, wäre er männlich gewesen gäbe es mit sicherheiten schon die ein oder andere Moralpredigt
[/offtopic]nein, ich zumindest bin
immermeistens freundlich
-
Ok, das habe ich jetzt verstanden. Ich habe ja auch gemeint, dass ich eine Methode schreibe, die den Vector Personen m_personen zurück gibt:
Ich habe diese Methode jetzt geschrieben, aber irgendwie mag mich mein Visual Studio nicht
#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);}; vector<Person> getPerson () {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].getPerson.size(); a++) //Das kennt er nicht { cout<<gruppen[i].getPerson[a].GetName()<<endl; //Das folglich auch nicht. } } cout<<endl; system("PAUSE"); return 0; }Und ich bin sehr froh, dass es Leute wie euch/dich :p gibt, die mir helfen.
-
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
