gpt4 book ai didi

c++ - Arduino IDE编译器错误多个定义

转载 作者:行者123 更新时间:2023-12-02 11:09:11 25 4
gpt4 key购买 nike

我在绘制arduino草图时遇到问题。

我得到这些错误:

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"

我的所有其他方法也会发生相同的情况。

使用DevC++ IDE,我可以成功地编译代码,因此我认为问题与Arduino IDE有关。

非常感谢您的帮助,祝您有美好的一天

最佳答案

我建议您看看this article,以更好地了解include指令。

C++ programs are built in a two stage process. First, each source file is compiled on its own. The compiler generates intermediate files for each compiled source file. These intermediate files are often called object files -- but they are not to be confused with objects in your code. Once all the files have been individually compiled, it then links all the object files together, which generates the final binary (the program).

Even though MyClass is declared in your program, it is not declared in main.cpp, and therefore when you compile main.cpp you get that error.

This is where header files come in. Header files allow you to make the interface visible to other .cpp files



所以确实,您需要包括头文件,而不是源文件。希望这可以帮助。

关于c++ - Arduino IDE编译器错误多个定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34973759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com