gpt4 book ai didi

c++ - Arduino 库中的编译错误

转载 作者:行者123 更新时间:2023-11-28 00:01:46 24 4
gpt4 key购买 nike

我在 Arduino 中编译草图时遇到一个奇怪的错误,可能是因为我创建的库中有错误。这是代码:

    #include <BlueHartwin.h>

BlueHartwin bH(7,8,115200);
byte incomingByte;

void noOp(void)
{
Serial<<"noOp"<<endl;
};

void leftWindowDown(void)
{
Serial<<"leftWindowDown"<<endl;
};

void setup() {
Serial.begin(115200);
bH.registerCmd(0,&noOp);
bH.registerCmd(1,&leftWindowDown);

}

void loop() {

if(bH.available())
{
incomingByte = bH.read()-48;
Serial<<incomingByte<<endl;
if (incomingByte<nrOfCommands)
bH.runCmd(incomingByte);

}
}

这是库的标题:

#ifndef BlueHartwin_H
#define BlueHartwin_H

#include <SoftwareSerial.h>
#include <Streaming.h>;
#include <Arduino.h>

#define nrOfCommands 255

typedef void (* CmdFuncPtr) (); // this is a typedef to command functions


class BlueHartwin {

public:
BlueHartwin(byte bluetoothTx,byte bluetoothRx,long baudRate);
~BlueHartwin();
//void setup(byte bluetoothTx,byte bluetoothRx,long baudRate);
boolean registerCmd(byte id,CmdFuncPtr cmdFuncPtr);
boolean unRegisterCmd(byte id,CmdFuncPtr cmdFuncPtr);
boolean runCmd(byte id);
void setDataLength(byte dataLength);
byte getDataLength();
boolean available();
byte read();

private:
CmdFuncPtr setOfCmds[255];
byte mDataLength;

};

#endif

和来源

#include "BlueHartwin.h";


SoftwareSerial bluetooth(7,8);
byte mDataLength;

BlueHartwin::BlueHartwin(byte bluetoothTx,byte bluetoothRx,long baudRate){
bluetooth = SoftwareSerial(bluetoothTx,bluetoothRx);
bluetooth.begin(baudRate);
}

BlueHartwin::~BlueHartwin(){

}

boolean BlueHartwin::registerCmd(byte id,CmdFuncPtr cmdFuncPtr){
if ((id<=nrOfCommands)&&(setOfCmds[id]==0)) {
setOfCmds[id]=cmdFuncPtr;
return true;
} else return false;
}

boolean BlueHartwin::unRegisterCmd(byte id,CmdFuncPtr cmdFuncPtr){
if (id<=nrOfCommands) {
setOfCmds[id]=0;
return true;
} else return false;
}


boolean BlueHartwin::runCmd(byte id){
if ((id<=nrOfCommands)&&(setOfCmds[id]!=0)) {
setOfCmds[id]();
return true;
} else return false;
}


void setDataLength(byte dataLength) {
mDataLength=dataLength;
}

byte getDataLength(){
return mDataLength;
}

boolean available(){
return true;
}

byte read(){
return 0;
}

这是我得到的错误:

sketch/Test_Bluehartwin00.ino.cpp.o: In function `loop':
/home/paolo/Projects/arduino/sketches/TESTS/Test_Bluehartwin00/Test_Bluehartwin00.ino:25: undefined reference to `BlueHartwin::available()'
/home/paolo/Projects/arduino/sketches/TESTS/Test_Bluehartwin00/Test_Bluehartwin00.ino:27: undefined reference to `BlueHartwin::read()'
collect2: error: ld returned 1 exit status
exit status 1

奇怪的是,我只在库类的公共(public)函数中的 2 个中出错。我真的不明白怎么了......我在 Ubuntu 14.04 64 位下使用 Arduino UNO 和 IDE 1.6.8。通常一切都运行良好。提前感谢您的帮助。

最佳答案

问题出在 .cpp 文件中。

给你带来问题的两个函数在这里:

boolean available(){
return true;
}

byte read(){
return 0;
}

正如它们一样,它们是免费/全局函数。你需要让他们成为类(class)的一部分:

boolean BlueHartwin::available(){
return true;
}

byte BlueHartwin::read(){
return 0;
}

注意:您还必须修改其他一些:

void BlueHartwin::setDataLength(byte dataLength) {
mDataLength=dataLength;
}

byte BlueHartwin::getDataLength(){
return mDataLength;
}

这些可以用同样的方法修复。

关于c++ - Arduino 库中的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38425750/

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