list-Deklaration innerhalb Klasse?



  • Hallo, liebe C++-Forumsgemeinde.

    Habe schon öfters mal hier vorbei gesehen und mir gedacht, wenn ich mal ein Problem hab, frag ich hier mal nach. Nun ist es soweit:

    Bin gerade dabei mir ein elektronisches Stellwerk zu schreiben, zw. erstmal die Grundzüge. Bis jetzt hatte ich dabei auch keine Probleme, nur auf einmal kann ich eine list nicht vernünftig innerhalb einer Klasse deklarieren 😕
    Außerhalb (main.cpp) ist dies kein Problem.

    //Fahrstraße.h
    #include <iostream>
    #include <list>
    #include "Feldelemente.h"
    #include "Gleisplan.h"
    
    class Fahrstraße
    {
    	//Eigenschaften
    private:
    
    	//Liste der Weichen, die in der Fahrstraße eingebunden sind
    	list<Weiche*> Weichenliste(5); //error C2059: Syntaxfehler: 'Konstante'
    }
    

    Hoffe mal, das reicht jetzt schonmal, ich wollte eigentlich nicht noch die anderen Header und zugehörigen .cpps angeben, da sie ziemlich groß sind.

    Vielleicht noch ein Hinweis, auf den ich mir keinen Reim machen kann:
    Wenn ich mit der Maus auf die Zeile der list gehe, erscheint im Infokasten:
    "std::list<Weiche*> Weichenliste(void);

    Hoffe, ihr könnt mir mit den Codeschnipseln weiterhelfen??

    FG, Tim 😉



  • Du kannst Member so nicht initialisieren (bzw. nur mit einem aktuellen Compiler, afaik). Mach das in der Initializiserungsliste deines Ctors.

    Abgesehen davon: Warum std::list? Und bist du dir ueberhaupt sicher, dass du Zeiger auf Weichen moechtest?



  • hm, ok?

    Also, ich hab in Gleisplan.h schon ne map und die tut ihren Dienst ganz gut...
    Wie initialisiert man denn ne list über die Konstruktorliste?? Hab ich noch nie gesehen 😃

    zu deiner Frage:
    list, da es ein selbstverwaltete Datenstruktur sein sollte und
    Zeiger auf Weichen, da bin ich mir eigentlich sicher.



  • Warum nicht vector? Und wozu brauchst du die Zeiger?



  • Sieht aus, als ob du noch sehr wenig Erfahrung mit Klassen hättest. Hol dir ein gutes Buch, den entsprechenden Thread gibt's in der C++-FAQ.
    Ich fürchte übrigens, dass du using namespace std; in einem deiner Header stehen hast - wieder ein Grund, deine Nase in ein Buch zu stecken.
    Und natürlich auch, weil du denkst, Zeiger seien was tolles (oder so ähnlich).

    @Keller...: Ja, non-static data member initializers dürften das erlauben, solange es da keine Fehler gibt wie hier (das ist aber IMO ein Compiler-Bug, da es korrekt aussieht).



  • Sone_logoff schrieb:

    @Keller...: Ja, non-static data member initializers dürften das erlauben, solange es da keine Fehler gibt wie hier (das ist aber IMO ein Compiler-Bug, da es korrekt aussieht).

    Oh, korrigiere: Nein, ist kein Bug, ist tatsächlich ill-formed.



  • hm, schon klar, wer in nem Forum Hilfe sucht, wird angewiesen nochmal ein Buch zulesen...
    In meinem Buch stand leider nichts darüber.
    Könntest/et Ihr mir nicht erklären, wieso das nicht geht, oder zumindest ein Stichwort geben, damit ich jedenfalls weiß, was ich mir ansehen muss??



  • Kellerautomat schrieb:

    Initializiserungsliste deines Ctors.

    Reicht das nicht als Stichwort? Hast du danach mittlerweile schonmal gegoogelt?



  • 96TB schrieb:

    Könntest/et Ihr mir nicht erklären, wieso das nicht geht, oder zumindest ein Stichwort geben, damit ich jedenfalls weiß, was ich mir ansehen muss??

    //Fahrstraße.h
    #include <iostream>
    #include <list>
    #include "Feldelemente.h"
    #include "Gleisplan.h"
    
    class Fahrstraße
    {
    public:
       Fahrstraße() : Weichenliste(list<Weiche*>(5)){}
        //Eigenschaften
    private:
    
        //Liste der Weichen, die in der Fahrstraße eingebunden sind
        list<Weiche*> Weichenliste; //error C2059: Syntaxfehler: 'Konstante'
    }
    


  • achso ja, hatte mich etwas an der konstruktorliste (initialisierung und zuweisung) gestoßen. Ich hatte jetzt eigentlich auch nur nach der Syntax gefragt, da ich mir nicht vorstellen konnte, wie das in der KListe aussieht. 😃

    EDIT:

    schon gelöst

    trotzdem danke 🙂



  • Wohl eher:

    : Weichenliste(5)
    

    Ich bin mir trotzdem sicher, dass du weder list, noch Zeiger willst.



  • Kellerautomat schrieb:

    Wohl eher:

    : Weichenliste(5)
    

    Ach Du Schande ... so unromantisch einfach geht das ... hab ich gar nicht erst ausprobiert, weil ich dachte ... ach, weiß ich auch nicht mehr ...



  • ähm, ok?

    wenn du (Kellerautomat) mir das mal näher erklären möchtest, auch für Leute verständlich, die nur ein kleineres Buch gelesen haben?? jetzt hast du mein Interresse geweckt 😃

    mein Gedanke war:

    alle Objekte im Gleisplan sind auf dem Heap angelegt und in einer
    map<int, Feldelement*> gespeichert. ich dachte mir, es ist am einfachsten auf die zuzugreifen, wenn ich einfach einen container nehme, der in der Stellreihenfolge die benutzen Weichen speichert? wenn nicht als Zeiger oder im container (list), wie denn dann?



  • Welchen Sinn hat es, eine 5-Elementige Liste mit Nullpointern im Konstruktor anzulegen?


Anmelden zum Antworten