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.cpp
和 B.cpp
在 link 时间。
你提供的例子中有一些错误,我假设你不只是 copy/paste 来源。就像 const char *names[3]; = {
行中的分号,或者 "Name2"
旁边的字符串列表中缺少的逗号
关于你的问题。您不应该在 B.cpp 中包含 A.h,我的意思是应该删除行 #include "A.h"
。您包含头文件,并且仅在您将在其他 cpp 文件中使用 *names
指针的地方使用 extern 关键字。
我有一些 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.cpp
和 B.cpp
在 link 时间。
你提供的例子中有一些错误,我假设你不只是 copy/paste 来源。就像 const char *names[3]; = {
行中的分号,或者 "Name2"
关于你的问题。您不应该在 B.cpp 中包含 A.h,我的意思是应该删除行 #include "A.h"
。您包含头文件,并且仅在您将在其他 cpp 文件中使用 *names
指针的地方使用 extern 关键字。