Неопределенная ссылка на переменную 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 во время ссылки.

Другие вопросы по тегам