“extern”关键字的问题

Trouble with 'extern' Keyword

提问人:Izza 提问时间:7/15/2010 最后编辑:Aakash GoelIzza 更新时间:8/1/2010 访问量:1461

问:

我在cpp文件中有一组全局变量和一个方法。

int a;

int b;

int c;

void DoStuff()
{

}

在头文件中,我使用 extern 关键字明确声明了它们。我的问题是当我将头文件包含在另一个 C++ 文件中时,我无法使用外部变量和方法。它给出一个链接器错误,指出错误 LNK2001:方法和变量的未解析外部符号。我在这里做错了什么??

PS:DoStuff() 方法填充变量。所有头文件和 cpp 文件都位于同一项目文件夹中。

谢谢!

C Visual-C++ 链接器错误 extern 未解决的外部

评论


答:

1赞 Justin Summerlin 7/15/2010 #1

必须包含定义这些变量的 .cpp 文件以及编译集标头中声明的函数。如果包含定义的 .cpp 文件未编译并链接到使用头文件中的声明的文件,则会收到链接器错误。extern

2赞 Prasoon Saurav 7/15/2010 #2

试试这个

在标头中定义这些变量,而不仅仅是声明它们。

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();
}
0赞 Mark B 7/15/2010 #3

是否确定要链接到与包含方法和变量的源文件相对应的目标文件?

0赞 Xzhsh 7/15/2010 #4

由于您使用的是 Visual-C++(根据标签),我只需确保编译时所有文件都在同一个项目中。确保您正在构建项目,而不仅仅是构建文件。

我怀疑情况是否如此,但您可能还想检查源文件是否编译为 C 或 C++,或者您可能会在命名方案上遇到一些麻烦。