#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).
Комментариев нет:
Отправить комментарий