您需要在main()之外实例化数据库,否则您将只声明一个遮蔽全局变量的局部变量。
GameServer.cpp:
#include GameSocket.h
Database db(1, 2, 3);
int main() {
//whatever
}
问题是db声明的范围。代码:
extern Database db;
真的意思是“db在全球某个地方宣布,而不是在这里”。然后代码不会继续并且实际上是全局声明它,而是在main()中本地声明,这在main()之外是不可见的。代码应如下所示,以解决您的链接问题:
Database db;
int main ()
{
...
}
extern Database db;
void some_function ()
{
...
}
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"
。