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 for
int ordo_litterarum[7]'
16: previous declaration as `litterae_grandes ordo_litterarum[8]'
17: invalid initializerKann 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!