c - 将“未定义的引用”解析为全局外部数组变量
问题描述
我有一个头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'
如何修复错误?
解决方案
使用extern
意味着您正在使用在另一个翻译单元中声明的变量(即基本上是源文件及其包含的头文件)。将 - 指定的变量名与其实际声明相关联是链接器的任务。extern
如果链接器找不到后者,它将报告“未定义的引用”。
正如评论中已经指出的那样,此错误的最常见原因是包含实际声明的源文件未编译或链接。
推荐阅读
- react-native - 使用反应导航时,要从子组件中隐藏父组件标题按钮?
- vue.js - 可能改变类星体组件的设计吗?
- java - MainActivity 不能转换为 android.app.Activity
- python - Pytorch 闪电,张量板:TypeError:无法腌制 _thread.lock 对象
- ms-access - 连续形式的奇怪行为
- c# - 如何在不将元素彼此相邻的情况下存储数组的子数组?
- c# - 如何在 c# 中的特定行上重新启动?
- html - 添加带有本地文件的背景图像
- python - 为什么会出现 datetime 函数错误?
- angular - Why Angular 9 routing is broken when i refresh?