Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Почему здесь определена переменная два раза?


Автор: Proger10 30.3.2014, 11:23
На Стэке наткнулся на интересную для себя тему: http://stackoverflow.com/questions/14402320/xcode-duplicate-symbol-error-when-using-global-variable там вопрос:
Код

Here's my code:

A.h:
class Foo
{
public:
    int bar;
};
Foo myFoo;

main.cpp:
#include "A.h"
int main()
{
    myFoo.bar = 2;
    return 0;
}

Xcode gives me the error (paraphrased):
duplicate symbol _myFoo in main.o & A.o


Но объяснения я так и не понял. Почему здесь myFoo оказывается объявленным два раза? Где он объявлен второй раз? Он же только раз объявлен в A.h. В чём здесь проблема? Объясните пожалуйста.

Автор: Alexeis 30.3.2014, 13:54
  Объявлять переменные в хидере плохой стиль. Если хидер включить в 2 cpp модуля, то будут созданы 2 экземпляра переменной. Переменные нужно объявлять в cpp файле, а если нужно чтобы ее видели другие модули, то нужно в хидере описывать переменную 2й раз как extern . 

Автор: Cheloveck 30.3.2014, 13:55
myFoo будет объявляться каждый раз при включении A.h. В данном примере -- одни раз.

Автор: Proger10 31.3.2014, 09:31
Вот оно как оказывается. Если два раза проинклюдить, то конечно же ошибка возникнет, теперь понял. Спасибо!

Автор: borisbn 31.3.2014, 11:46
Цитата(Proger10 @  31.3.2014,  09:31 Найти цитируемый пост)
Если два раза проинклюдить, то конечно же ошибка возникнет

Цитата
duplicate symbol _myFoo in main.o & A.o

В сообщении компилятора даже сказано, в какие два исходника этот h-ник включен

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)