提问人:Izza 提问时间:7/15/2010 最后编辑:Aakash GoelIzza 更新时间:8/1/2010 访问量:1461
“extern”关键字的问题
Trouble with 'extern' Keyword
问:
我在cpp文件中有一组全局变量和一个方法。
int a;
int b;
int c;
void DoStuff()
{
}
在头文件中,我使用 extern 关键字明确声明了它们。我的问题是当我将头文件包含在另一个 C++ 文件中时,我无法使用外部变量和方法。它给出一个链接器错误,指出错误 LNK2001:方法和变量的未解析外部符号。我在这里做错了什么??
PS:DoStuff() 方法填充变量。所有头文件和 cpp 文件都位于同一项目文件夹中。
谢谢!
答:
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++,或者您可能会在命名方案上遇到一些麻烦。
评论