Неопределенная ссылка на переменную extern в заголовке C++
У меня есть код на C++:
// A.h
extern const char *names[3];
// B.cpp
#include "A.h"
const char *names[3] = {
"Name1",
"Name2"
"Name3"
};
void getName()
{
char *name;
strncpy(name, names[0], 5);
};
// C.cpp
#include "A.h"
Затем, когда я его создаю, генерируется следующая ошибка:
неопределенная ссылка на `имена 'В чем причина и как это исправить?
2 ответа
У вас есть некоторые ошибки в приведенном вами примере. Я предполагаю, что вы не просто копируете / вставляете исходный код. Как точка с запятой в строке const char *names[3]; = {
или пропущенная запятая в списке строк рядом с "Name2"
Так что по поводу твоего вопроса. Вы не должны включать А в вас B.cpp, я имею в виду линию #include "A.h"
должны быть удалены. Вы включаете заголовочный файл и используете ключевое слово extern только там, где вы будете использовать *names
указатель в других файлах cpp.
B.cpp
не должен включать A.h
Не нужно. extern
в A.h
является объявлением, которое устанавливает для компоновщика ожидание того, что глобальная переменная может быть найдена в другом объектном файле, который должен быть связан, но B.cpp
где переменная определена.
Просто убедитесь, что связали оба A.cpp
а также B.cpp
во время ссылки.