首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ISO C++禁止声明“init”没有任何类型[-fpermissive]

ISO C++禁止声明“init”没有任何类型[-fpermissive]
EN

Stack Overflow用户
提问于 2015-12-05 03:25:30
回答 1查看 2.5K关注 0票数 0

对于我目前正在做的一个IOT项目,我尝试使用带有粒子光子的rfid传感器来读取rfid标签。在我的doe中,我从编译器那里得到一个错误,它读取:

代码语言:javascript
复制
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

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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中添加了一个有效的函数类型,并在我的checkBitValidationUART()函数中添加了一个额外的括号后,我得到了一个新的错误,如下所示:

代码语言:javascript
复制
 ../../../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

我不知道为什么会出现这个错误,如果有人能帮我调试这个,那就太好了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-05 03:32:47

错误消息告诉您,函数init没有返回类型,这是正确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34100905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档