外部关键字和未解析的外部符号

问题描述 投票:2回答:3

我在绘画中绘制了一个小图表来解释我的问题:

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

图形:

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

c++ symbols extern
3个回答
3
投票

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

GameServer.cpp:

#include GameSocket.h
Database db(1, 2, 3);
int main() {
   //whatever
}

7
投票

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

extern Database db;

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

在file1.c

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

file2.c中

extern Database db;
void some_function ()
{
  ...
}

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"

© www.soinside.com 2019 - 2024. All rights reserved.