外部关键字和未解析的外部符号

时间:2008-12-27 14:52:03

标签: c++ symbols extern

我画了一个解释我问题的小图:

但是在发布后我使用<img>标签时似乎没有出现?

图表:

http://i44.tinypic.com/103gcbk.jpg

3 个答案:

答案 0 :(得分:7)

问题是db声明的范围。代码:

extern Database db;

实际上意味着“db在某个地方声明 ,而不是在这里”。然后代码不会继续并且实际上是全局声明它,而是在main()中本地声明,这在main()之外是不可见的。代码应如下所示,以解决您的链接问题:

file1.c中

Database db;
int main ()
{
  ...
}

file2.c中

extern Database db;
void some_function ()
{
  ...
}

答案 1 :(得分:3)

您需要在main()之外实例化数据库,否则您将只声明一个局部变量遮蔽全局变量。

GameServer.cpp:

#include GameSocket.h
Database db(1, 2, 3);
int main() {
   //whatever
}

答案 2 :(得分:1)

extern正在应用于所有CPP(以及生成的OBJ)文件,因此它们都没有实际实例化数据库。

这是解决这个问题的一种方法。在Database.h中,将extern Database db更改为:

#ifdef INSTANTIATE_DB
Database db;
#else
extern Database db;
#endif

然后在你的一个CPP文件中(如果有的话,Database.cpp会很好)在#define INSTANTIATE_DB之前添加#include "Database.h"