答案 0 :(得分:7)
问题是db声明的范围。代码:
extern Database db;
实际上意味着“db在某个地方声明 ,而不是在这里”。然后代码不会继续并且实际上是全局声明它,而是在main()中本地声明,这在main()之外是不可见的。代码应如下所示,以解决您的链接问题:
Database db;
int main ()
{
...
}
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"
。