我使用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