我在编译我的arduino草图时遇到了问题。Arduino IDE编译器错误多重定义
我得到这些错误:
C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp/bit_array.cpp:6: multiple definition of `Bit_Array::Bit_Array(unsigned long)'
C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp\bit_array.cpp.o:C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp/bit_array.cpp:6: first defined here
C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp\Master_Controller_modbus_RTU.cpp.o: In function `Bit_Array::~Bit_Array()':
C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp/bit_array.cpp:18: multiple definition of `Bit_Array::~Bit_Array()'
C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp\bit_array.cpp.o:C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp/bit_array.cpp:18: first defined here
C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp\Master_Controller_modbus_RTU.cpp.o: In function `Bit_Array::~Bit_Array()':
C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp/bit_array.cpp:18: multiple definition of `Bit_Array::~Bit_Array()'
C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp\bit_array.cpp.o:C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp/bit_array.cpp:18: first defined here
C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp\Master_Controller_modbus_RTU.cpp.o: In function `Bit_Array::Set_Value_MSB(unsigned char, unsigned long, unsigned char)':
C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp/bit_array.cpp:26: multiple definition of `Bit_Array::Set_Value_MSB(unsigned char, unsigned long, unsigned char)'
C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp\bit_array.cpp.o:C:\Users\FRANCE~1\AppData\Local\Temp\build8652217817452966608.tmp/bit_array.cpp:26: first defined here
collect2.exe: error: ld returned 1 exit status
Errore durante la compilazione
这意味着我已经定义了一个以上的时间我的构造函数,析构函数和方法。 我有点困惑,因为我只定义了它一次,正如你所看到的。
bit_array.h
#ifndef bit_array
#define bit_array
// includo il supporto per le funzioni base dell'arduino
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#include <pins_arduino.h>
#endif
#include<cstdint> // libreria per supporto tipo uint8_t in C++ standard (arduino lo conosce, ma voglio fare la libreria cross-plattform)
class Bit_Array
{
private:
unsigned long N_Elementi; // Numero di bit della memoria effettivamente utilizzati (es 15 bit occupano 2byte, ma solo i primi 15bit hanno significato).
uint8_t* Array; // array di uint8_t. Ogni uint8_t verrà interpretato come una sequenza di 8 bool
unsigned long Dimensione; // Dimensione (in byte) della memoria puntata da Array. Deve essere allocata una quantità di memoria pari a upper_bound(N_elementi/8)
public:
Bit_Array(const unsigned long Number_of_Elements);
~Bit_Array();
// Getters
uint8_t Get_Value_MSB(const unsigned long Inizio, const uint8_t Lunghezza) const;
uint8_t Get_Value_LSB(const unsigned long Inizio, const uint8_t Lunghezza) const; // Implementazione futura
// Setters
void Set_Value_MSB(const uint8_t B, const unsigned long Inizio, const uint8_t Lunghezza);
void Set_Value_LSB(const uint8_t B, const unsigned long Inizio, const uint8_t Lunghezza); // Implementazione futura
void Print() const;
};
#endif
bit_array.cpp
#include "bit_array.h"
Bit_Array::Bit_Array(const unsigned long Number_of_Elements)
{
if(Number_of_Elements <= 0)
{Array=NULL;} // non alloco la memoria
else
{
N_Elementi = Number_of_Elements;
Dimensione = (unsigned long) (((double)Number_of_Elements/8.0) + 0.5); // alloco una quantità di memoria sufficiente a memoriazzare i Number_of_Elements. La memoria viene allocata con granularità di byte, quindi devo allocare Number_of_Elements/8 byte e poi arrotondare per eccesso
}
}
Bit_Array::~Bit_Array()
{if(Array!=NULL)
{delete Array;
Array=NULL;}
}
void Bit_Array::Set_Value_MSB(const uint8_t B, const unsigned long Inizio, const uint8_t Lunghezza)
{
}
在主我只
#include "bit_array.cpp"
相同的薄g与所有其他方法一起发生。
使用DevC++ IDE,我可以成功编译代码,所以我认为这个问题与Arduino IDE有关。
非常感谢你对你有所帮助,祝您有一个愉快的一天
_'#include“bit_array.cpp”_ _不包含源文件,这是公然错误!包含用于获取声明的头文件并链接包含定义的所有'.cpp'文件。 –
#πάνταῥεῖ谢谢你的回复。 就像你建议我的,主要的,我现在包括.h而不是.cpp,它的工作! 我有一个问题...自3年以来,我总是在主要包括.cpp,并始终工作(使用gcc编译器)。我在大学学到了。我真的不明白你的“公然错误”......我认为我可以单独编译所有的cpp,而不是链接.o文件,或者将所有代码包含在main中并编译它(就像将所有代码复制到一个文件中一样,编译它)。如果错了,我会再次研究编译和链接过程。 谢谢! – user3450036