Компиляция с переменной Extern в C ++ - PullRequest
0 голосов
/ 15 октября 2018

У меня есть файл заголовка: headerFiles.h, содержащий следующую переменную extern:

extern char *err_msg;
extern char recvbuf[DEFAULT_BUFLEN];
extern char sendbuf[DEFAULT_BUFLEN]; 

этот файл заголовка включен в: Helper.h, а Helper.h включен в Helper.cpp, So,

headerFiles.h -> включено в -> Helper.h -> включено в -> Helper.cpp

но когда я ссылаюсь на внешние переменные в моем файле Helper.cpp, компилятор выдает следующую ошибку компоновки:

Ошибка LNK2001 неразрешенный внешний символ "char * err_msg" (? Err_msg @@3PADA)

Я думаю, что его можно скомпилировать с помощью командной строки, но я хочу знать, как скомпилировать его с помощью Visual C ++.У меня есть VC ++ 2017 Community Edition.Пожалуйста помоги.

1 Ответ

0 голосов
/ 15 октября 2018

С здесь :

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

Другими словами, ваш код просто объявляет, что определена переменная err_msg (и другие) (!)где-то, полагаясь на компоновщик, чтобы знать, где он находится.Вот почему вы получаете ошибку компоновщика, когда не удается найти запрошенное имя.

Одним из возможных решений является определение:

char *err_msg;
char recvbuf[DEFAULT_BUFLEN];
char sendbuf[DEFAULT_BUFLEN]; 

в одном (и только одном) из * .cpp файлов вваш проект.

...