[Anfänger]Array mit Startwerte



  • Hallo allerseits,

    ich habe folgendes Problem. Ich möchte ein Array:
    int monate[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; initialisieren.
    Das klappt auch ganz gut, nur jetzt habe ich eine Klasse gebaut:

    class foo
    {
    puplic:
           int bar;
    
    private:
           int monate[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; 
    };
    

    Das klappt schon mal nicht.

    Mittlerweile habe ich rausbekommen, dass ich das mittels Konstruktor mit Startwerten versehen soll:

    Jetzt habe ich das so probiert:

    class foo
    {
    puplic:
           foo(int monate[13])
                 {0,31,28,31,30,31,30,31,31,30,31,30,31;};
    
    private:
           int bar;
    };
    

    Das klappt auch nicht. Was mache ich denn falsch??

    Bin für Hilfe dankbar.

    Grüsse Tonda



  • Du kannst innerhalb der include-Datei nichts zuweisen. Das geht nur innerhalb des Konstruktors innerhalb der cpp-Datei oder über inline-Codierung. In diesem Fall aber ziemlich umständlich.

    Auch wenn ich sicherlich kein Freund von globalen Deklarationen bin, warum beläst Du das Array nicht global ausserhalb der Klasse. An der Zahl der Monate und Tage (sofern Du hier Schaltjahre unberücksichtigt lassen kannst) wird sich vermutlich in nächster Zeit nichts ändern.



  • @Manfred Schmidtke
    Warum denn global? Nur damit die Initialisierung hübscher wird? Das ist wahrlich kein guter Grund. Allein schon, da du die hübsche Initialisierung auch über ein statisches Attribut erreichen kannst.

    class Foo {
    private:
    static const int monate[13];
    };
    
    // in der cpp-Datei
    const int Foo::monate[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    


  • array-objektvariablen kann man in c++ meines wissens überhaubt nicht initialisieren! außer natürlich auf die althergebrachte weise: im konstuktor jedem feld einzeln einen wert zuweisen.

    da machst du es doch besser so, wie es HumeSikkins schreibt 😃



  • Vielen Dank für Eure schnelle Hilfe.


Anmelden zum Antworten