У меня странная проблема со статической переменной, которая, очевидно, не инициализирована, как и должно быть.
У меня есть огромный проект, который работает с Windows и Linux. Поскольку у Linux-разработчика нет этой проблемы, я бы предположил, что это какой-то проводной материал Visual Studio.
Заголовок файлаСтатическая переменная не инициализирована
class MyClass
{
// some other stuff here
...
private:
static AnotherClass* const Default_;
};
CPP файл
AnotherClass* const MyClass::Default_(new AnotherClass(""));
MyClass(AnotherClass* const var)
{
assert(Default_);
...
}
Проблема заключается в том, что Default_
всегда NULL
. Я также попробовал точку останова при инициализации этой переменной, но я не могу ее поймать.
Аналогичная проблема существует в другом классе.
CPP файл
std::string const MyClass::MyString_ ("someText");
MyClass::MyClass()
{
assert(MyString_ != "");
...
}
В этом случае MyString_
всегда пусто. Так что опять не инициализировано.
У кого-нибудь есть идея? Это проблема настроек Visual Studio?
Приветствие Simon
Edit:
я наткнулся на статической инициализации краха. Но я не уверен, что это может быть проблемой, потому что нет никаких проблем с компилятором Linux. Разве компилятор не должен реагировать таким же образом в этом случае?
Попробуйте создать новый проект с нуля и посмотрите, не случилось ли это там – shoosh
Извините, не можете сделать. Как я уже сказал, это действительно огромный проект. –
Я предполагаю, что первым примером была опечатка и должна была быть 'AnotherClass * const MyClass :: Default_ (new AnotherClass (" "));' –