我已经搜索了一些东西,但我仍然不明白..
file1.h
extern int *game_array[5];
Player.c
#include "file1.h"
void *delete_player(player_struct *player)
{
... //some code
game_array[5] = 5; //undefined reference to `game_array`
... //some code
}
当我不使用extern时,“工作正常”=我可以用错误构建它,但程序没有完成.. 我想使用extern是好的,但有些事情是错误的.. 我想在我的所有.c源文件中使用这个game_array ...服务器上的游戏数组,我的应用程序中只有一个这个数组的实例。
答案 0 :(得分:3)
您需要在其中一个game_array
文件中定义 .c
,并将该文件编译/链接到您的可执行文件中。
定义如下:
int *game_array[5];
你的file1.h
所说的基本上是“我的项目中某处存在一个名为game_array
的变量,它具有类似”的类型。但是,在您将变量定义到某个地方(通常在.c
文件中)之前,该变量实际上并不存在。
答案 1 :(得分:1)
extern
关键字基本上意味着编译器不应该抱怨该符号,即使它没有被定义,因为它将在链接时可用。
因此,如果没有在链接时定义,你显然会有错误。
您需要在C文件中提供一个实现:
类似的东西:
#include "file1.h"
int * game_array[ 5 ];
void * delete_player( player_struct * player)
{
...
答案 2 :(得分:1)
写extern int *game_array[5];
意味着在某个文件中某处有game-array
的实际定义 - 即没有extern.
的声明你没有提供,{链接器抱怨实际变量在任何地方都不存在。