Ошибка в том, что вы не можете инициализировать static const char*
в классе. Вы можете инициализировать здесь целые переменные.
Вы должны объявить переменную-член в классе, а затем инициализировать его вне класса:
// заголовок файла
class Foo {
static const char *SOMETHING;
// rest of class
};
// CPP файл
const char *Foo::SOMETHING = "sommething";
Если это кажется раздражающим, думайте об этом как о том, что инициализация может появляться только в одной единицы перевода. Если это было в определении класса, это обычно включалось бы несколькими файлами. Константные целые числа - это особый случай (что означает, что сообщение об ошибке, возможно, не так ясно, как могло бы быть), а компиляторы могут эффективно заменить использование переменной с целым значением.
Напротив, переменная char*
указывает на фактический объект в памяти, который необходим для действительно существующего, и это определение (включая инициализацию), которое делает объект существующим. «Одно правило определения» означает, что вы не хотите помещать его в заголовок, потому что тогда все единицы перевода, включая этот заголовок, будут содержать определение. Они не могут быть связаны друг с другом, хотя строка содержит одинаковые символы в обоих, потому что в текущих правилах C++ вы определили два разных объекта с тем же именем, и это не является законным. Тот факт, что у них в них одинаковые персонажи, не делает его законным.
Вы должны использовать «статический Const символ * константный НЕЧТО» вместо того, чтобы, если вы действительно хотите иметь возможность переназначить SOMETHING, чтобы указать на что-то еще во время выполнения. – bk1e