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 😉


Anmelden zum Antworten