Рассмотрите этот код.Статическая ошибка переменной ссылки, C++
//header.h
int x;
//otherSource.cpp
#include "header.h"
//main.cpp
#include "header.h"
...
int main()
{
}
В этом случае компилятор ошибся с сообщением. «фатальная ошибка LNK1169: обнаружен один или несколько найденных множимых символов»
, но когда я добавляю статику до x, она компилируется без ошибок.
И вот второй случай.
//header.h
class A
{
public:
void f(){}
static int a;
};
int A::a = 0;
/otherSource.cpp
#include "header.h"
//main.cpp
#include "header.h"
...
int main()
{
}
В этом случае компилятор снова ошибается с несколькими объявлениями.
Может ли кто-нибудь объяснить мне поведение, которое мы статические переменные в классах и глобальных декларациях? Заранее спасибо.
Определение (где вы инициализируете статический variabe) должно быть в одном * и только в одном исходном файле. Не помещайте его в файл заголовка. – PaulMcKenzie