Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决此c链接器错误?_C_Arrays_Pointers_Linker - Fatal编程技术网

如何解决此c链接器错误?

如何解决此c链接器错误?,c,arrays,pointers,linker,C,Arrays,Pointers,Linker,我在我的程序中声明了一个全局变量,如上所述,但是我得到了一个链接器错误 LNK2005:_测量值已在MAIN.obj中定义 我正在修改代码 uint8 *measurements[30] = {(uint8*)0x0041c620}; ) 然后我也得到了一个错误这个错误告诉你,你已经在不止一个翻译单元中定义了这个全局变量-在MAIN.obj以及其他一些单位中。哪一个我不能说,因为你没有发布整个错误消息,只有一行 您的问题没有包含足够的信息来重现问题,也没有告诉您错误的确切位置。也许您在头文件

我在我的程序中声明了一个全局变量,如上所述,但是我得到了一个链接器错误

LNK2005:_测量值已在MAIN.obj中定义

我正在修改代码

uint8 *measurements[30] = {(uint8*)0x0041c620}; 
)


然后我也得到了一个错误

这个错误告诉你,你已经在不止一个翻译单元中定义了这个全局变量-在MAIN.obj以及其他一些单位中。哪一个我不能说,因为你没有发布整个错误消息,只有一行


您的问题没有包含足够的信息来重现问题,也没有告诉您错误的确切位置。也许您在头文件中定义了变量?

定义是否在头文件中?如果是这样,那么对于包含头的每个源文件,您将得到一个变量定义。尝试标记更改标头以仅声明变量,而不是定义变量,如下所示:

typedef unsigned char uint8;
    uint8 *measurements[30];
    measurements[30]= {(uint8*)0x0041c620}
然后在其中一个文件中定义它,例如main.c,如下所示:

  extern uint8_t *measurements[30];

看起来您需要一个包含30个8位值的数组,并且该数组已经存在于某个特定地址

在一个源文件(measurements.c)中:

在头文件(measurements.h)中:

用法:

uint8 * const measurements;

注意,我添加了
const
,因为我认为您不想更改数组地址(0x0041c620)

您在何处声明了度量变量?如果您在另一个文件中使用全局变量。。在您试图使用外部程序的地方使用它。@vladmir:我编辑了代码。这是正确的方法吗?检查您链接的任何其他对象文件中是否定义了测量值。如果是这样的话,您可能希望声明它为static,以使符号对外部世界不可见。或者,正如Digital_Reality所指出的,假设您想使用关键字
extern
来使用“other”声明。请看一下文件或相关讨论。Jens:非常感谢您的回复。它显示测量值的大小为4字节,但我指定为uint8。它应该是每个1字节。谢谢你的回复。大小为4字节。如何将其设置为1字节?uint8是8位整数,但如果我喜欢上面的方法,则每个变量的大小为4字节。这可能是因为您声明的是指向8位值的指针数组,而不是8位值数组。尝试uint8_t测量[30]={0x11、0x22、0x33};或者类似的。根据代码猜测,您可能希望从地址0x0041c620加载一个8位值。您可以这样做:uint8_t度量[30]={*(uint8_t*)0x0041c620};0x0041c620:这将是测量的起始地址??应该是。我希望你知道当硬编码地址时你在做什么。你能告诉我那是什么吗?那是什么?您应该知道0x0041c620来自哪里,这是您的问题。哦,对不起。每个变量的大小为4字节。如何使其成为1字节??
uint8 * const measurements = (uint8*)0x0041c620;
uint8 * const measurements;
#include "measurements.h"

// In some function
measurements[29] = ... // Set last element to something