2

我用油漆画了一个小图来解释我的问题:

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

图形:

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

4

3 回答 3

7

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

extern Database db;

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

文件1.c

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

文件2.c

extern Database db;
void some_function ()
{
  ...
}
于 2008-12-27T16:10:35.443 回答
3

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

游戏服务器.cpp:

#include GameSocket.h
Database db(1, 2, 3);
int main() {
   //whatever
}
于 2008-12-27T14:55:40.727 回答
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".

于 2008-12-27T14:58:53.620 回答