C++ 中外部变量的未定义引用 header

undefined reference for the extern variable in C++ header

我有一些 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"

然后当我构建它时,它会生成以下错误:

对“名称”的未定义引用 是什么原因以及如何解决?

B.cpp不应该包括A.h没有必要。 A.h 中的 extern 是一个 声明 ,它为 linker 设定了一个期望,即全局变量可以在另一个目标文件中找到被 link 编辑,但 B.cpp 是变量 定义的地方

只需确保 link A.cppB.cpp 在 link 时间。

你提供的例子中有一些错误,我假设你不只是 copy/paste 来源。就像 const char *names[3]; = { 行中的分号,或者 "Name2"

旁边的字符串列表中缺少的逗号

关于你的问题。您不应该在 B.cpp 中包含 A.h,我的意思是应该删除行 #include "A.h"。您包含头文件,并且仅在您将在其他 cpp 文件中使用 *names 指针的地方使用 extern 关键字。