Der Fehler ist, dass man nicht initialisiere einen static const char*
innerhalb der Klasse. Sie können dort nur ganzzahlige Variablen initialisieren.
Sie müssen die Membervariable in der Klasse deklarieren, und es dann außerhalb der Klasse initialisieren:
// Header-Datei
class Foo {
static const char *SOMETHING;
// rest of class
};
// CPP-Datei
const char *Foo::SOMETHING = "sommething";
Wenn Das scheint ärgerlich, weil es so aussieht, als könnte die Initialisierung nur in einer Übersetzungseinheit erscheinen. Wenn dies in der Klassendefinition der Fall wäre, würde dies normalerweise in mehreren Dateien enthalten sein. Konstante Ganzzahlen sind ein Sonderfall (was bedeutet, dass die Fehlermeldung möglicherweise nicht so klar ist, wie es sein könnte), und Compiler können die Verwendung der Variablen durch den Ganzzahlwert effektiv ersetzen.
Im Gegensatz dazu zeigt eine char*
Variable auf ein tatsächliches Objekt im Speicher, das wirklich existieren muss, und es ist die Definition (einschließlich Initialisierung), die das Objekt existiert. Die "eine Definitionsregel" bedeutet, dass Sie sie daher nicht in eine Kopfzeile einfügen möchten, da dann alle Übersetzungseinheiten einschließlich dieser Kopfzeile die Definition enthalten würden. Sie konnten nicht miteinander verknüpft werden, obwohl die Zeichenfolge in beiden die gleichen Zeichen enthält, da Sie unter den aktuellen C++ - Regeln zwei verschiedene Objekte mit demselben Namen definiert haben, was nicht zulässig ist. Die Tatsache, dass sie die gleichen Charaktere in sich tragen, macht es nicht legal.
Sie sollten "static const char * const ETWAS" stattdessen verwenden, es sei denn, Sie wirklich Ich möchte SOMETHING neu zuordnen können, um zur Laufzeit auf etwas anderes zu zeigen. – bk1e