ошибка: множественное определение ... при определении внешней переменной в третьей библиотеке - PullRequest
0 голосов
/ 06 мая 2020

У меня есть три библиотеки:

Первая (Lib.h) объявляет переменную, которая будет определена в другом месте:

extern int a;

Вторая (Lib2.h) включает третью one:

#include "Lib3.h"

Файл. cpp этой библиотеки (Lib2. cpp) не содержит ничего, кроме этого:

#include "Lib2.h"

и третий (Lib3.h) наконец содержит определение переменной:

int a;

Основная программа просто включает первую и вторую библиотеки:

#include "Lib.h"
#include "Lib2.h"

Когда я компилирую основную программу, я получаю указанную ошибку.

В чем проблема?

1 Ответ

1 голос
/ 06 мая 2020

Когда int a; существует в Lib3.h, тогда каждая единица перевода, которая включает Lib3.h (прямо или косвенно), получит свою собственную копию a, отсюда и ошибка. a необходимо объявить в Lib3.h как extern, как и в Lib.h, а затем фактическая переменная int a; должна быть определена в файле .cpp в другом месте (Lib2.cpp будет достаточно ), поэтому существует только 1 копия a, к которой относятся все extern.

...