Функция, уже определенная в .obj

Из того, что я понимаю, эта ошибка вызвана неправильным использованием защиты заголовков, когда у вас есть несколько файлов, включая один и тот же файл. В моем случае это дерево include, вызывающее ошибку:

File A includes Z, which contains the functions I need. File B includes A, and file C includes A.

Без каких-либо #pragma once ', программа дает кучу вариантов одной и той же ошибки:

blahblah.obj: error LNK2005: class some::namespace::ObjectType Object already 
    defined in dialogDlg.obj

Я просто задавался вопросом, учитывая, как я описал дерево include, каков правильный способ его правильного компиляции?

Я попытался использовать #pragma once в файле Z, но это не сработало. Я также попробовал #pragma один раз в файле A, который также не работал. Наконец, я попробовал это как на A, так и на Z, также не работал.

Ответ 1

Кажется, вы пытаетесь определить переменную в файле заголовка. Если этот файл заголовка включен в несколько исходных файлов, он будет определяться в каждом исходном файле, тем самым вы получите ошибку.

Вместо этого объявите его как extern, а затем определите в одном из ваших исходных файлов.

Итак, в файле заголовка:

extern ObjectType Object;

И в исходном файле:

ObjectType Object;