Globale Objekte liefern Kompilierfehler



  • Hallo, liebe Leute!

    Folgender Quelltext wird ohne Fehlermeldung kompiliert, wenn er innerhalb der Hauptfunktion (main) steht, wenn ich ihn aber außerhalb direkt darüber schreibe, liefert er Fehlermeldungen (s. ganz unten):

    meine_Klasse Objektfeld[8];                         //Zeile 16
    Objektfeld[7] = meine_Klasse(8, new string[8][52]); //Zeile 17
    

    Ich erzeuge also zunächst ein eindimensionales Datenfeld aus 8 Objekten einer selbstdefinierten Klasse; dann will ich das Objekt Nummer 7 (sollte das letzte sein, wenn man die Null mitzählt, oder?) mit einem selbstdefnierten =-Operator festlegen. Rechts des ,,=" steht ein Konstruktoraufruf der Klasse. (Darf ein ,,new als Parameter des Konstruktors stehen? - Mit Hilfszeiger, den ich vorher definiere und mit ,,new" belege, ergeben sich jedenfalls die selben Fehlermeldungen)

    Wie gesagt: In der Hauptfunktion alles kein Problem für den Kompilierer, global aber liefert es folgende Fehler:

    17: ISO C++ forbids declaration of ordo_litterarum' with no type 17: conflicting types forint ordo_litterarum[7]'
    16: previous declaration as `litterae_grandes ordo_litterarum[8]'
    17: invalid initializer

    Kann mir jemand helfen? Ich bin eigentlich ein ziemlicher Anfänger (< 1 Jahr), benutze aber vor lauter Begeisterung doch gerne viel zu viel selbstdefiniertes Zeug und Befehle, die ich nicht völlig verstehe.

    Stets der Euere

    Carlos



  • Objektfeld[7] = meine_Klasse(8, new string[8][52]); //Zeile 17
    

    Diese Zeile ist ein Befehl; der kann nicht einfach außerhalb einer Funktion/Methode rumstehen.



  • Ah, ich glaube, ich verstehe: Außerhalb aller Funktionen dürfen also nur Deklarationen stehen? Und was ist, wenn ich mein Feld in einer einzigen Zeile deklariere und initialisiere (wenn das die richtigen Worte sind):

    meine_Klasse Objektfeld[3] = {meine_Klasse(), meine_Klasse(), 
                                  meine_Klasse(8, new string[8][52])};
    

    Geht das? Zumindest gibt es keine Fehlermeldung; aber macht der Kompilierer auch, was ich will?

    Carlos



  • Die Felder gleich zu initialisieren sollte OK sein.



  • Respekt, das war schnell geantwortet. Danke!


Anmelden zum Antworten