- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于我目前正在进行的 IOT 项目,我正在尝试使用带有粒子光子的 rfid 传感器来读取 rfid 标签。在我的母鹿中,我从编译器中收到一条错误消息:
SeeedRFID.h:88:34: error: ISO C++ forbids declaration of 'init' with no type [-fpermissive]
init(int rxPin, int txPin);
SeeedRFID.cpp:55:37: error: ISO C++ forbids declaration of 'init' with no type [-fpermissive]
SeeedRFID::init(int rxPin, int txPin)
SeeedRFID.cpp: In member function 'int SeeedRFID::init(int, int)':
SeeedRFID.cpp:70:1: warning: no return statement in function returning non-void [-Wreturn-type]
更具体地说,我正在使用 c++/java 粒子构建 ide 为我的粒子光子芯片开发这段代码。这结合了 3 个文件(.ino、.cpp 和 .h)。我用注释“//这是我似乎得到部分错误的地方”指出了哪些代码行导致错误我的文件如下所示:
RFID_UART.ino
#if defined (SPARK)
#include "SeeedRFID.h"
#else
#include <SoftwareSerial.h>
#include <SeeedRFID.h>
#endif
#define RFID_RX_PIN RX
#define RFID_TX_PIN TX
// #define DEBUGRFID
#define TEST
SeeedRFID RFID;
RFIDdata tag;
void setup() {
RFID.init(RFID_RX_PIN, RFID_TX_PIN); //This is where I seem to be getting part of the error
Serial1.begin(9600); //Done here to prevent SeeedRFID constructor system crash
//Serial is basically the same thing as System.out.println();
Serial.begin(57600);
Serial.println("Hello, double bk!"); //This is so I know that setup() works
}
void loop() {
if(RFID.isAvailable()){
tag = RFID.data();
Serial.print("RFID card number: ");
Serial.println(RFID.cardNumber());
#ifdef TEST
Serial.print("RFID raw data: ");
for(int i=0; i<tag.dataLen; i++){
Serial.print(tag.raw[i], HEX);
Serial.print('\t');
}
#endif
}
}
SeeedRFID.cpp
#include "SeeedRFID.h"
SeeedRFID::init(int rxPin, int txPin)//This is where I seem to be getting part of the error
{
#if (PLATFORM_ID == 0) || (PLATFORM_ID == 6) //Core or Photon (they're both the same platform essentially)
_rfidIO = &Serial1; // Select Serial1 or Serial2
#else
_rfidIO = new SoftwareSerial(rxPin, txPin);
_rfidIO->begin(9600);
#endif
// init RFID data
_data.dataLen = 0;
_data.chk = 0;
_data.valid = false;
_isAvailable = false;
_type = RFID_UART;
}
SeeedRFID::SeeedRFID() //Empty constructor
{
}
boolean SeeedRFID::checkBitValidationUART()
{
if( (5 == _data.dataLen) && (_data.raw[4] == _data.raw[0]^_data.raw[1]^_data.raw[2]^_data.raw[3]))
{
_data.valid = _isAvailable = true;
return true;
} else
{
_data.valid = _isAvailable = false;
return false;
}
}
boolean SeeedRFID::read()
{
_isAvailable = false;
if (_data.dataLen != 0)
{
_data.dataLen = 0;
}
while (_rfidIO->available())
{
_data.raw[_data.dataLen++] = _rfidIO->read();
#ifdef DEBUGRFID
Serial.println("SeeedRFID:read() function, and the RFID raw data: ");
for (int i = 0; i < _data.dataLen; ++i)
{
Serial.println();
Serial.print(_data.raw[i], HEX);
Serial.print('\t');
}
Serial.println();
#endif
delay(10);
}
return SeeedRFID::checkBitValidationUART();
}
boolean SeeedRFID::isAvailable()
{
switch(_type){
case RFID_UART:
return SeeedRFID::read();
break;
case RFID_WIEGAND:
return false;
break;
default:
return false;
break;
}
}
RFIDdata SeeedRFID::data()
{
if (_data.valid)
{
return _data;
}else{
// empty data
RFIDdata _tag;
return _tag;
}
}
unsigned long SeeedRFID::cardNumber()
{
// unsigned long myZero = 255;
unsigned long sum = 0;
if(0 != _data.raw[0]){
// _data.raw[0] = _data.raw[0] & myZero;
sum = sum + _data.raw[0];
sum = sum<<24;
}
// _data.raw[1] = _data.raw[1] & myZero;
sum = sum + _data.raw[1];
sum = sum<<16;
unsigned long sum2 = 0;
// _data.raw[2] = _data.raw[2] & myZero;
sum2 = sum2 + _data.raw[2];
sum2 = sum2 <<8;
// _data.raw[3] = _data.raw[3] & myZero;
sum2 = sum2 + _data.raw[3];
sum = sum + sum2;
#ifdef DEBUGRFID
Serial.print("cardNumber(HEX): ");
Serial.println(sum, HEX);
Serial.print("cardNumber: ");
Serial.println(sum);
#endif
return sum;
}
SeeedRFID.h
#ifndef SeeedRFID_H
#define SeeedRFID_H
#include "application.h"
struct RFIDdata
{
int dataLen;
byte chk;
boolean valid;
unsigned char raw[5];
};
enum RFIDType
{
RFID_UART,
RFID_WIEGAND
};
class SeeedRFID
{
private:
#if (PLATFORM_ID == 0) || (PLATFORM_ID == 6) //Core or Photon
USARTSerial * _rfidIO; // software serial
#else
SoftwareSerial * _rfidIO; // software serial
#endif
RFIDdata _data;
boolean _isAvailable;
RFIDType _type;
boolean checkBitValidationUART();
boolean read();
public:
SeeedRFID(int rxPin, int txPin);
SeeedRFID(); // Empty constructor
~SeeedRFID();
init(int rxPin, int txPin);//This is where I seem to be getting part of the error
boolean isAvailable();
RFIDdata data();
unsigned long cardNumber();
};
#endif //__SeeedRFID_H__
我不太确定这是否是正在发生的减速问题,但如果有人可以帮助我,那就太好了。提前致谢!
跟进:
在 init 中将 void 添加为有效函数类型,并在我的 checkBitValidationUART() 函数中添加一对额外的括号后,我收到如下所示的新错误:
../../../build/target/user/platform-6/libuser.a(rfid_uart.o): In function `__static_initialization_and_destruction_0':
rfid_uart.cpp:17: undefined reference to `SeeedRFID::~SeeedRFID()'
collect2: error: ld returned 1 exit status
make: *** [78d90e0fa4198d16c036bc7b90f2e4ec4507eca98981faccb460440188a7.elf] Error 1
我不知道为什么会出现这个错误,如果有人能帮我调试一下,那就太好了!
最佳答案
错误消息告诉您函数 init
没有返回类型,这是正确的。
关于java - ISO C++ 禁止声明没有类型的 'init' [-fpermissive],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34100905/
我不断得到: ../src/stack.cpp: In function ‘int main()’: ../src/stack.cpp:34:28: error: invalid conversion
#include #include #include #include 我需要有关此代码的帮助。我的编译器一直要求我使用 -fpermissive 选项,但我不知道在哪里输入它。我粘贴了下面的
我正在尝试使用 pthreads 将 Leibniz 的总和并行化以近似 PI。当我使用最新版本的 g++ 运行此代码时,会出现这两个错误,我真的不明白为什么,我正在这样编译:g++ pi2.cpp
我有一个 C 单头库,我想在我的 C++ 项目中使用它。通常,我只需包含该文件就可以了,因为 C++ 几乎是 C 的超集。但是,该库有一个跳过初始化的 goto,这违反了C++ 标准。 我可以通过在
#include #include using namespace std; typedef bool (*compare)(int,int); void SelectionSort(int *i
我正在尝试构建一个非循环树结构,每个节点都由一个字符串标识,每个分支节点都是 PrimMap 类型。同一代的所有节点都保存为 map 中的 Item 对象。这是缩写代码: class PrimMap
我知道这个问题已经回答了。但我只是想确认一下我的理解。 这是我的代码片段。来自this . #include using namespace std; class Base { void a
我写了下面的代码示例,我不得不使用 -fpermissive 来跳过错误/警告 #include #include using namespace std; int endOfProgram(){
我只是想知道 -fpermissive 标志在 g++ 编译器中的作用是什么?我得到: error: taking address of temporary [-fpermissive] 我可以通过将
我定义了两个不同的typedef结构:datatype_2d_1和datatype_2d_2,它们基本上都有两个 double 作为成员,但它们的定义不同。现在我有一个变量数据类型 z1 和一个指针
我正在使用 NDK (Android) 在 C++ 中构建一个库。输出告诉我一些代码被标记为错误,但可以通过使用 -fpermissive 标志来抑制。至少在我看来是这样。输出是: MyClass.c
我正在尝试构建一个带有静态数据成员的模板类,但当我尝试编译以下代码时收到此错误消息: |In instantiation of ‘T& T::t’:| 16|required from here| 1
我是 c++ 的新手,在 ubuntu 上使用 eclipse cdt 并在我的头文件中收到此错误: initializing argument 1 of 'std::map,Supplier*> E
我的想法是检查这个 dll 是否有我需要的版本,或者它是旧的还是新的?我正在尝试使用 THUNK/Trampoline 函数。 这是我在另一个 *.dll 文件中的用法。 int FilterVers
为什么编译器会在指示的行报错? class C { std::string s; public: C() { s = "";} ~C() {} void Set(con
我有一个类Cache,它的函数 write 指定为 bool write(const MemoryAccess &memory_access, CacheLine &cl); 我这样调用这个函数。 c
我在这个控制台应用程序中使用 Qt 4.5.1,当我想在 if 语句 行接收用户输入时,它收到此错误: iso c++ forbids comparison between pointer and i
我有一个数组,其大小在运行时确定。 cout>size1; int* scores=new int[size1]; 然后我填写这个数组分数。现在我想增加它的大小。我创建了一个新的动态数组。 int*
代码 int cycle_length(int i, int j) { int cycleLength = 0; for (int k = i; k cycle_length) {
我有以下代码: int Array::getSize(){ //do something } Movie Array::getMovie(int i){ //do something }
我是一名优秀的程序员,十分优秀!