C++错误:在"I2Cdev"(类名)之前预期为"="、""、";"、"asm"或"__attribute__"

C++ error: expected '=', ',', ';', 'asm' or '__attribute__' before 'I2Cdev' (classname)

本文关键字:asm attribute 错误 I2Cdev 类名 C++      更新时间:2023-10-16

当我试图将。h文件添加到我的CodeLite项目时,我得到了这个错误。这是我的文件,比较短:

#ifndef _I2CDEV_H_
#define _I2CDEV_H_
// -----------------------------------------------------------------------------
// I2C interface implementation setting
// -----------------------------------------------------------------------------
#define I2CDEV_IMPLEMENTATION       I2CDEV_ARDUINO_WIRE
// comment this out if you are using a non-optimal IDE/implementation setting
// but want the compiler to shut up about it
#define I2CDEV_IMPLEMENTATION_WARNINGS
// -----------------------------------------------------------------------------
// I2C interface implementation options
// -----------------------------------------------------------------------------
#define I2CDEV_ARDUINO_WIRE         1 // Wire object from Arduino
// -----------------------------------------------------------------------------
// Arduino-style "Serial.print" debug constant (uncomment to enable)
// -----------------------------------------------------------------------------
//#define I2CDEV_SERIAL_DEBUG
//#include "Arduino.h"
//#include <Wire.h>
///
// 1000ms default read timeout (modify with "I2Cdev::readTimeout = [ms];")
#define I2CDEV_DEFAULT_READ_TIMEOUT     1000
**class I2Cdev {** //this line has the error
    public:
        I2Cdev();
        
        static int8_t readBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);
        //static int8_t readBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout);
        static int8_t readBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);
        //static int8_t readBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout);
        static int8_t readByte(uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);
        //static int8_t readWord(uint8_t devAddr, uint8_t regAddr, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout);
        static int8_t readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);
        //static int8_t readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout);
        static bool writeBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data);
        //static bool writeBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t data);
        static bool writeBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t data);
        //static bool writeBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t data);
        static bool writeByte(uint8_t devAddr, uint8_t regAddr, uint8_t data);
        static bool writeWord(uint8_t devAddr, uint8_t regAddr, uint16_t data);
        static bool writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data);
        static bool writeWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data);
        static uint16_t readTimeout;
};
#endif /* _I2CDEV_H_ */

为什么我得到这个cpp错误和如何修复?

编辑

我有另一个头文件被包括,其中包括一个结构,它可能是格式化不正确?

#ifndef _CALLIB_H_
#define _CALLIB_H_
//#include <Arduino.h>
#define CALLIB_DATA_VALID         0x15fc
#define CALLIB_DATA_VALID_LOW     0xfc // pattern to detect valid config - low byte
#define CALLIB_DATA_VALID_HIGH    0x15 // pattern to detect valid config - high byte
typedef struct
{
  short valid;                        // should contain the valid pattern if a good config
  bool magValid;                   // true if mag data valid
  short magMinX;                      // mag min x value
  short magMaxX;                      // mag max x value
  short magMinY;                      // mag min y value
  short magMaxY;                      // mag max y value
  short magMinZ;                      // mag min z value
  short magMaxZ;                      // mag max z value 
  bool accelValid;                 // true if accel data valid
  short accelMinX;                    // mag min x value
  short accelMaxX;                    // mag max x value
  short accelMinY;                    // mag min y value
  short accelMaxY;                    // mag max y value
  short accelMinZ;                    // mag min z value
  short accelMaxZ;                    // mag max z value
} CALLIB_DATA;
//  calLibErase() erases any current data in the EEPROM
void calLibErase();                
//  calLibWrite() writes new data to the EEPROM
void calLibWrite(CALLIB_DATA * calData); 
//  calLibRead() reads existing data and returns true if valid else false in not.
bool calLibRead(CALLIB_DATA * calData); 
#endif // _CALLIB_H_

在此之前包含的头文件在最终类型定义上缺少分号:

struct S {
} s /* right here */

或者

typedef struct
{
} S /* right here */

中间的部分只是预处理器命令,不影响编译器的解析状态。

错误消息中"期望"的内容是可以在typedef中命名的标识符之后的所有内容,或者在变量声明中命名的标识符。