我用油漆画了一个小图来解释我的问题:
<img>
但是当我在发布后使用标签时似乎没有出现?
图形:
问题是 db 的声明范围。编码:
extern Database db;
真正的意思是“db在某个地方被全局声明,只是不在这里”。然后代码不会继续并实际在全局范围内声明它,而是在 main() 中本地声明,这在 main() 之外是不可见的。代码应如下所示,以解决您的链接问题:
Database db;
int main ()
{
...
}
extern Database db;
void some_function ()
{
...
}
您需要在 main() 之外实例化数据库,否则您只需声明一个隐藏全局变量的局部变量。
游戏服务器.cpp:
#include GameSocket.h
Database db(1, 2, 3);
int main() {
//whatever
}
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"
.