Я знаю, что эта программа не использует статическую переменную соответствующим образом, но он показывает, как воспроизвести поведение я видел:Странное поведение статической глобальной переменной
main.cpp:
int main(){
MyObject* p = new MyObject();
Header::i = 5;
printf("i %i\n", Header::i);
p->update();
return 0;
}
myobject.cpp:
MyObject::MyObject(){
}
void MyObject::update(){
printf("i %i\n", Header::i);
}
Экстер N час:
namespace Header {
static int i;
};
Выход я получаю:
i : 5
i : 0
Почему я не получаю 5
для обоих выходов? Откуда у этого 0
? Не могли бы вы объяснить, как работают статические переменные?
Рассмотрим, как '# include' работает, и что 'static' означает для нелокальных нечленов переменных. – immibis
Вы также должны опубликовать '# include' в каждом файле cpp, чтобы было ясно, что вы включаете 'Extern.h' в два файла cpp, следовательно, создавая две переменные' i'. – chi
Вы использовали [включить охранников] (https://en.wikipedia.org/wiki/Include_guard)? – ST3