我在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
奇怪的是,我只在库类的2个公共函数中得到错误。 我真的不明白什么是错的...... 我在Ubuntu 14.04 64位下使用Arduino UNO和IDE 1.6.8。通常一切都运行良好。 提前感谢您的帮助。
答案 0 :(得分:3)
问题出在.cpp文件中。
这两个函数给你一个问题:
boolean available(){
return true;
}
byte read(){
return 0;
}
因为它们是免费/全球功能。你需要让它们成为课堂的一部分:
boolean BlueHartwin::available(){
return true;
}
byte BlueHartwin::read(){
return 0;
}
注意:您还必须修改其他几个:
void BlueHartwin::setDataLength(byte dataLength) {
mDataLength=dataLength;
}
byte BlueHartwin::getDataLength(){
return mDataLength;
}
这些可以用同样的方法修复。