麻烦'extern'关键字

时间:2010-07-15 04:13:51

标签: c++ visual-c++ linker-errors extern unresolved-external

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

int a;

int b;

int c;

void DoStuff()
{

}
在头文件中的

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

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

谢谢!

4 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您确定要在与包含方法和变量的源文件对应的目标文件中进行链接吗?

答案 3 :(得分:0)

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

我怀疑是这种情况,但您也可能想要检查源文件是编译为C还是C ++,否则您可能会遇到命名方案的问题。