我尝试了很多解决方案,但无法使我的程序正常运行。
main.h
short NWMP_acc[3];
short NWMP_gyro[3];
的main.cpp
printf_( "%i,%i,%i, g\n", NWMP_gyro[YAW],NWMP_gyro[PITCH],NWMP_gyro[ROLL]);
other.cpp
#include "main.h"
NWMP_gyro[YAW] = (((buf[3]>>2)<<8) + buffer[0]);//multiple definition of `NWMP_gyro'
如果我改为“extern short NWMP_acc [3];”比我得到一个错误“未定义引用`NWMP_acc'”
答案 0 :(得分:6)
您需要使用和不使用extern
在标题中,您需要:
extern short NWMP_acc[3];
extern short NWMP_gyro[3];
但是在你的一个“.cpp”文件中你还需要:
short NWMP_acc[3];
short NWMP_gyro[3];
原因是extern
关键字可以大致被认为是“我保证在一个文件中的某个地方存在一个看起来像这样的真实物品。”
答案 1 :(得分:4)
如果您将数组声明为extern
(如果您想要跨翻译单位使用全局变量,则必须使用此数组),您必须定义只有一个翻译单位。所以,例如:
// main.h
extern short NWMP_acc[3]; // declare
// main.cpp
#include "main.h"
short NWMP_acc[3]; // define
// other.cpp
#include "main.h"
void foo() {
std::cout << NWMP_acc[0] << std::endl; //just use, don't define again
}