Глобальные переменные, c ++ - PullRequest
0 голосов
/ 20 января 2012

Я перепробовал много решений, но не могу заставить мою программу работать.

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 ]

6 голосов
/ 20 января 2012

Вам нужно как с, так и без extern

В вашем заголовке вам нужно:

extern short NWMP_acc[3];
extern short NWMP_gyro[3];

Но в одном из ваших файлов ".cpp" вам все еще нужно:

short NWMP_acc[3];
short NWMP_gyro[3];

Причина этого заключается в том, что ключевое слово extern можно грубо понимать как означающее: «Я обещаю, что где-то в одном файле существует реальная реальная вещь, которая выглядит следующим образом».

4 голосов
/ 20 января 2012

Если вы объявляете массив как 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...