2014-09-22 5 views
0

Я использую 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> 

Мой проект Решение показано на изображении ниже:

enter image description here

тот факт, когда я исключить testMotor.cpp из проекта он работает без ошибок.

Может ли причина быть в том, что визуальный микро не использовал компилятор C++, но компилятор C? Чем я могу изменить компилятор на C?

Может ли кто-нибудь помочь мне решить проблему?

+0

Постарайтесь сохранить * объявления * в заголовочных файлах и * определениях * в файлах '.cpp'. – Biffen

+0

Ну, вы * определяете * 'initMotors' в файле заголовка, поэтому каждый исходный файл ([* единица перевода *) (http://en.wikipedia.org/wiki/Translation_unit_%28programming%29)), где вы включаете заголовочный файл будет определен. –

+0

Теперь вы можете объявить 'initMotors'' inline', чтобы обойти это, но в целом, как говорили другие, вы должны поместить определения функций в свои файлы .c/.cpp. –

ответ

0

Это выглядит как библиотека называется Motors_PWM_Timer.h пытается определить функции, которые вы также задающие в вашем testMotor.h

Подробнее

Когда Visual Micro компилирует он должен делать то, что Arduino IDE это значит, что проект Visual Studio не используется. Средство IDE Arduino может смотреть только на фактические исходные файлы на диске, так что все они скомпилированы как в Arduino, так и в Visual Micro.

Visual Micro использует ту же самую цепочку инструментов, что и в Arduino IDE.

Проект Visual Studio предназначен исключительно для удобства использования и для питания intellisense.

Лучшее место для Visual Micro помощь находится в специальном forum.

Thanks