Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Ошибка LNK2005: … already defined in …

#cpp


Здравствуйте. Имеется у меня 3 файла:

Vector.h
Vector.cpp
main.cpp

Я хотел объявить 2 глобальные переменные:
 int quantity_copy = 0;
 int quantity_allocates = 0;

Объявил их в Vector.h, в двух других файлах пробовал
 extern int quantity_copy;
 extern int quantity_allocates;

А также подобные различные комбинации различных возможных вариантов, прочел несколько
статей на форумах, но тем не менее почему-то постоянно выдает ошибку:

Error 6   error LNK2005: "int quantity_copy" (?quantity_copy@@3HA) already defined
in main.obj
Error   7   error LNK2005: "int quantity_allocates" (?quantity_allocates@@3HA) already
defined in main.obj
Error   8   error LNK1169: one or more multiply defined symbols found

Помогите, пожалуйста, разобраться, в чем проблема.    


Ответы

Ответ 1



Следует различать объявление и определение переменной. extern int a; //объявление int a; // определение Определение переменной должно встречаться только один раз во всей программе, объявления могут встречаться сколько угодно раз - они подсказывают компилятору, что в каком-то из программных модулей существует определение этой переменной. В вашем случае переменная определена в заголовочом файле. Может показаться, что определение уникально, но это не так - директива include просто добавляет код подключаемого файла вместо себя, поэтому определен фактически происходит и в main.cpp, и в Vector.cpp. Поэтому правильно сделать так - определение переменной поместить в один из cpp-файлов (например Vector.cpp), а объявление в h-файл (Vector.h).

Комментариев нет:

Отправить комментарий