全局变量,c ++

时间:2012-01-20 11:50:39

标签: c++ global-variables

我尝试了很多解决方案,但无法使我的程序正常运行。

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'”

2 个答案:

答案 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
}