const Array-Deklaration in C ++ Header-Datei

7

Ich habe eine Klasse namens AppSettings, wo ich ein Array mit einer Reihe von Notenfrequenzen habe. Ich bekomme mehrere Fehler mit dem unten stehenden Code und ich bin mir nicht sicher, was das Problem ist.

Die Fehlermeldungen sind:

  • static data member of type 'const float [36] must be initialized out of line
  • A brace enclosed initializer is not allowed here before '{' token
  • Invalid in-class initialization of static data member of non-integral type

Und der Code:

%Vor%

Wie der Name schon sagt, ist dies nur eine Header-Datei mit einigen Einstellungen und Werten, die ich in der App brauche.

    
networkprofile 27.07.2012, 18:33
quelle

3 Antworten

16

Sie können den Wert von static -Klassenmembern in der Klasse nicht definieren. Sie müssen eine solche Zeile in der Klasse haben:

%Vor%

Und dann in einer Implementierungsdatei für die Klasse ( AppSettings.cpp vielleicht):

%Vor%

Außerdem müssen Sie hier nicht die Zahl in [] angeben, da C ++ intelligent genug ist, um die Anzahl der Elemente in Ihrem Initialisierungswert zu zählen.

    
KRyan 27.07.2012, 18:38
quelle
10

Das funktioniert gut in C ++ 11

%Vor%     
rubenvb 27.07.2012 19:01
quelle
8

C ++ 03 unterstützt keine Klassendefinitionen für komplexe Daten wie Arrays von Konstanten.

Um eine solche Definition im Namespace-Bereich in einer Header-Datei zu platzieren und die Ein-Definition-Regel nicht zu brechen, können Sie wie folgt eine spezielle Ausnahme für Template-Klassen verwenden:

%Vor%

Es gibt auch einige andere Techniken, die verwendet werden können:

  • Eine Inline-Funktion, die einen Verweis auf das Array erzeugt (oder als Indexer verwendet wird).

  • Platzieren Sie die Definition in einer separat kompilierten Datei.

  • Berechnen Sie einfach die Zahlen nach Bedarf.

Ohne weitere Informationen möchte ich nicht die Wahl für Sie treffen, aber es sollte keine schwierige Wahl sein.

    
Cheers and hth. - Alf 27.07.2012 18:55
quelle

Tags und Links