我在 cpp 文件中有一组全局变量和一个方法。
int a;
int b;
int c;
void DoStuff()
{
}
在头文件中,我使用 extern 关键字显式声明了它们。我的问题是当我在另一个 C++ 文件中包含头文件时,我不能使用外部变量和方法。它给出了一个链接器错误,说错误 LNK2001:方法和变量的未解析外部符号。我在这里做错了什么??
PS: DoStuff() 方法填充变量。所有头文件和 cpp 文件都在同一个项目文件夹中。
谢谢你!
我在 cpp 文件中有一组全局变量和一个方法。
int a;
int b;
int c;
void DoStuff()
{
}
在头文件中,我使用 extern 关键字显式声明了它们。我的问题是当我在另一个 C++ 文件中包含头文件时,我不能使用外部变量和方法。它给出了一个链接器错误,说错误 LNK2001:方法和变量的未解析外部符号。我在这里做错了什么??
PS: DoStuff() 方法填充变量。所有头文件和 cpp 文件都在同一个项目文件夹中。
谢谢你!
尝试这个
在标题中定义这些变量,而不是仅仅声明它们。
extern int x;
只是一个声明(不是定义)
简单的例子
a.cpp
int a,b,c; //definition
void doStuff(){
}
b.cpp
extern int a,b,c; //extern keyword is mandatory
void doStuff(); //extern keyword is optional because functions by default have external linkage
int main()
{
doStuff();
}
您必须在编译集中包含定义这些变量和头文件中声明的函数的.cpp文件。extern
如果包含定义的.cpp文件未编译并链接到使用头文件中声明的文件,您将收到链接器错误。
您确定要链接到与包含您的方法和变量的源文件相对应的目标文件吗?
由于您使用的是 Visual-C++(根据标签),因此我只需确保在编译时所有文件都在同一个项目中。确保您正在构建项目,而不仅仅是构建文件。
我怀疑是这种情况,但您可能还想检查源文件是编译为 C 还是编译为 C++,否则您可能会在命名方案上遇到一些麻烦。