首页 > 解决方案 > 将“未定义的引用”解析为全局外部数组变量

问题描述

我有一个头constants.h文件,其中包含以下数组变量声明:

extern storageCommandData storageCommands[];

数组的类型在别处定义,与问题无关。在另一个源文件(.c)中,我像这样初始化了数组:

#include "constants.h"

storageCommandData storageCommands[STORAGE_COMMAND_NUM] =
    {
        /*storageCommandData intilazation follows the
          following template: {commandName, storageSize}*/
        {".db", 1},
        {".dw", 4},
        {".dh", 2},
        {".asciz", 0},
};

我尝试在另一个源文件(与我在其中定义数组的文件不同)中使用这些数组,方法是包含constants.h.

但是,当我尝试使用变量 storageCommands 时,我收到以下错误消息:

undefined reference to `storageCommands'

如何修复错误?

标签: cexternundefined-reference

解决方案


使用extern意味着您正在使用在另一个翻译单元中声明的变量(即基本上是源文件及其包含的头文件)。将 - 指定的变量名与其实际声明相关联是链接器的任务。extern如果链接器找不到后者,它将报告“未定义的引用”。

正如评论中已经指出的那样,此错误的最常见原因是包含实际声明的源文件未编译或链接。


推荐阅读