我使用Visual Studio 2013与Visual micro插件为arduino板。 我有错误,当我创建一个.cpp文件,就像在下面的错误列表:在视觉微的XXXXX多重定义
编译“AeroQuad”的“超级Arduino的2560或巨型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):multiple定义 个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: 第一次定义这里错误创建。
我不明白这是为什么?
我的头文件是这样的:
// 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
文件在我.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 2014-09-22 12:32:22
那么你在头文件中定义*'initMotors',所以每个源文件([* translation unit *](http://en.wikipedia.org/wiki/Translation_unit_%28programming%29))包含头文件将被定义。 – 2014-09-22 12:32:46
现在你可以声明'initMotors'是'inline'来解决这个问题,但是一般情况下,正如其他人所说的,你应该把函数定义放在你的.c/.cpp文件中。 – 2014-09-22 12:38:11