【发布时间】:2008-12-27 14:52:03
【问题描述】:
【问题讨论】:
-
如您所见,代码比图片简单。将您的代码缩减到显示您的问题的绝对最少的行。发布那些。图片不如精简到基本问题的代码 sn-ps 准确。
-
那张照片告诉我们什么。
【问题讨论】:
问题是db的声明范围。代码:
extern Database db;
真正的意思是“db 被声明为全局某处,只是不在这里”。然后代码不会继续并实际在全局范围内声明它,而是在 main() 中本地声明,这在 main() 之外是不可见的。代码应如下所示,以解决您的链接问题:
Database db;
int main ()
{
...
}
extern Database db;
void some_function ()
{
...
}
【讨论】:
您需要在 main() 之外实例化数据库,否则您将只声明一个局部变量来映射全局变量。
GameServer.cpp:
#include GameSocket.h
Database db(1, 2, 3);
int main() {
//whatever
}
【讨论】:
extern 应用于所有 CPP(以及生成的 OBJ)文件,因此它们都没有实际实例化 DB。
这是解决此问题的一种方法。在 Database.h 中,将 extern Database db 更改为:
#ifdef INSTANTIATE_DB
Database db;
#else
extern Database db;
#endif
然后在您的一个 CPP 文件中(如果有的话,Database.cpp 会很好)在 #include "Database.h" 之前添加一个 #define INSTANTIATE_DB。
【讨论】: