Я использую Visual Studio 2013 с визуальным микро-плагином для плат arduino. я получил ошибки, когда я создаю файл .cpp, как и в списке ошибок ниже:множественное определение XXXXX в Visual micro
Compiling 'AeroQuad' для 'Arduino Mega 2560 или Mega ADK' testMotor.cpp.o: В функции
writeMotors()' Motors_PWM_Timer.h:multiple definition of
writeMotors () ' AeroQuad.cpp.o: C: \ Users \ Adi \ Documents \ Drone \ AeroQuad_v3.2 \ libraries \ AQ_Motors \ Motors_PWM_Timer.h: 127: сначала определен здесь ld.exe: Отключение релаксации: он не будет работать с несколько определений testMotor.cpp.o: В функцииwriteMotors()' Motors_PWM_Timer.h:multiple definition of
motorCommand» AeroQuad.cpp.o :(bss.motorCommand + 0x0).: первый определяется здесь testMotor.cpp.o :(data.numberOfMotors + 0x0):. мультипликатор определениеnumberOfMotors' AeroQuad.cpp.o:(.data.numberOfMotors+0x0): first defined here testMotor.cpp.o:In function
commandAllMotors (INT) ' Motors_PWM_Timer.h: несколько определенияcommandAllMotors(int)' AeroQuad.cpp.o:C:\Users\Adi\Documents\Drone\AeroQuad_v3.2\libraries\AQ_Motors\Motors_PWM_Timer.h:149: first defined here testMotor.cpp.o:In function
initializeMotors (NB_Motors)' Motors_PWM_Timer.h: несколько определения изinitializeMotors(NB_Motors)' AeroQuad.cpp.o:C:\Users\Adi\Documents\Drone\AeroQuad_v3.2\libraries\AQ_Motors\Motors_PWM_Timer.h:68: first defined here testMotor.cpp.o:In function
initMotors (NB_Motors) ' testMotor.h: множественная определениеinitMotors(NB_Motors)' AeroQuad.cpp.o:\testMotor.h:22: first defined here testMotor.cpp.o:In function
pulseMotors (неподписанный символ)' Motors.h: множественное определение `pulseMotors (unsigned char) ' AeroQuad.cpp.o: C: \ Users \ Adi \ Documents \ Drone \ AeroQuad_v3.2 \ libraries \ AQ_Motors \ Motors.h: 51: сначала определено здесь Ошибка создания .elf
Я не понимаю, почему это?
Мой заголовочный файл так:
// testMotor.h
#ifndef _TESTMOTOR_h
#define _TESTMOTOR_h
/*Adi*/
//#define MOTOR_PWM
#define MOTOR_PWM_Timer
//#define MOTOR_APM
//#define MOTOR_I2C
#define NB_MOTOR_4
//#define NB_MOTOR_6
//#define NB_MOTOR_8
#if defined MOTOR_PWM_Timer
#include <Motors_PWM_Timer.h>
#endif
#if defined (NB_MOTOR_4)
#define NB_MOTOR 4
#define NB_MOTOR_CONFIG FOUR_Motors
#endif
void testMotor(int motor);
void initMotors(NB_Motors motorConfig);
#endif
В моей testMotor.cpp файл I'am включая файл testMotor.h
. Как и в приведенном ниже коде:
#include "testMotor.h"
void testMotor(int motor) {
for (int motorTrust = 1000; motorTrust < 1400; motorTrust += 10) {
motorCommand[motor] = motorTrust;
writeMotors();
delay(200);
}
motorCommand[motor] = 1000;
writeMotors();
}
void initMotors(NB_Motors motorConfig) {
initializeMotors(motorConfig);
}
Я также включая testMotor.h
файл в моем .ino проекте. Как и в приведенном ниже коде:
#include "testMotor.h"
#include "Motors.h"
#include <EEPROM.h>
#include <Wire.h>
#include <GlobalDefined.h>
#include "AeroQuad.h"
#include "PID.h"
#include <AQMath.h>
#include <FourtOrderFilter.h>
Мой проект Решение показано на изображении ниже:
тот факт, когда я исключить testMotor.cpp
из проекта он работает без ошибок.
Может ли причина быть в том, что визуальный микро не использовал компилятор C++, но компилятор C? Чем я могу изменить компилятор на C?
Может ли кто-нибудь помочь мне решить проблему?
Постарайтесь сохранить * объявления * в заголовочных файлах и * определениях * в файлах '.cpp'. – Biffen
Ну, вы * определяете * 'initMotors' в файле заголовка, поэтому каждый исходный файл ([* единица перевода *) (http://en.wikipedia.org/wiki/Translation_unit_%28programming%29)), где вы включаете заголовочный файл будет определен. –
Теперь вы можете объявить 'initMotors'' inline', чтобы обойти это, но в целом, как говорили другие, вы должны поместить определения функций в свои файлы .c/.cpp. –