uint8 *measurements[30] = {(uint8*)0x0041c620};
我已经在我的程序中声明了一个全局变量,但是我收到了链接器错误
LNK2005:已在MAIN.obj中定义_测量
我正在修改代码
typedef unsigned char uint8;
uint8 *measurements[30];
measurements[30]= {(uint8*)0x0041c620}
然后我也收到了错误
答案 0 :(得分:0)
该错误告诉您已在多个转换单元中定义了此全局变量 - 在MAIN.obj以及其他一些转换单元中。我不知道哪一个,因为你没有发布整个错误信息,只有一行。
您的问题中没有足够的信息来重现问题,或者告诉您错误的确切位置。也许您在头文件中定义了变量?
答案 1 :(得分:0)
头文件中的定义是什么?如果是这样,您将获得包含标头的每个源文件的变量的一个定义。尝试标记更改标题只是声明变量,而不是定义它,如下所示:
extern uint8_t *measurements[30];
然后在其中一个文件中定义它,例如main.c像这样:
uint8 *measurements[30] = {(uint8*)0x0041c620};
答案 2 :(得分:0)
您似乎需要30个8位值的数组,并且该数组已存在于某个特定地址。
在一个源文件(measurements.c)中:
uint8 * const measurements = (uint8*)0x0041c620;
在头文件(measurements.h)中:
uint8 * const measurements;
用法:
#include "measurements.h"
// In some function
measurements[29] = ... // Set last element to something
请注意,我添加了const
,因为我认为您不想更改阵列地址(0x0041c620)。