множественное определение XXXXX в Visual Micro

0

Я использую Visual Studio 2013 с Visual Micro plugin для плат arduino. У меня возникли ошибки при создании файла.cpp, как в приведенном ниже списке ошибок:

Компиляция '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 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 (NB_Motors) ) 'testMotor.h: множественное определение initMotors(NB_Motors)' AeroQuad.cpp.o:\testMotor.h:22: first defined here testMotor.cpp.o:In function pulseMotors (unsigned char) 'Motors.h: множественное определение of '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, включая файл 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 файл 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>

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

Изображение 174551

факт заключается в том, что я исключаю testMotor.cpp из проекта, который он запускает без ошибок.

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

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

  • 0
    Попробуйте сохранить объявления в заголовочных файлах и определения в .cpp файлах.
  • 0
    Вы определите initMotors в заголовочном файле, поэтому для каждого исходного файла ( единицы перевода ), в который вы включаете заголовочный файл, он будет определен.
Показать ещё 7 комментариев
Теги:
gcc
visual-studio-2013
compiler-errors

1 ответ

0

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

Больше информации

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

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

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

Лучшее место для помощи Visual Micro - это посвященный форум.

благодаря

Ещё вопросы

Сообщество Overcoder
Наверх
Меню