2014-09-22 68 views
0

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

我的解決方案的項目顯示在下面的圖片:

enter image description here

事實是,當我從它運行沒有錯誤的項目排除testMotor.cpp

原因可能是視覺微不使用C++編譯器,但C編譯器?比我要更改編譯器到C?

有人可以幫我解決這個問題嗎?

+0

試着在頭文件中保留*聲明*並在'.cpp'文件中保留*定義*。 – Biffen 2014-09-22 12:32:22

+0

那麼你在頭文件中定義*'initMotors',所以每個源文件([* translation unit *](http://en.wikipedia.org/wiki/Translation_unit_%28programming%29))包含頭文件將被定義。 – 2014-09-22 12:32:46

+0

現在你可以聲明'initMotors'是'inline'來解決這個問題,但是一般情況下,正如其他人所說的,你應該把函數定義放在你的.c/.cpp文件中。 – 2014-09-22 12:38:11

回答

0

這看起來像一個叫做Motors_PWM_Timer.h庫試圖定義你還限定你testMotor.h功能

更多信息

當Visual微編譯它應該做的Arduino的IDE這意味着Visual Studio項目不被使用。 Arduino IDE只能查看磁盤上的實際源文件,因此這就是Arduino和Visual Micro中編譯的內容。

Visual Micro使用與Arduino IDE相同的工具鏈。

Visual Studio項目純粹是爲了便於使用和提供智能感知。

對於Visual Micro幫助最好的地方是在專用的forum

謝謝