C++错误:在"I2Cdev"(类名)之前预期为"="、""、";"、"asm"或"__attribute__"
C++ error: expected '=', ',', ';', 'asm' or '__attribute__' before 'I2Cdev' (classname)
当我试图将。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中命名的标识符之后的所有内容,或者在变量声明中命名的标识符。
相关文章:
- C++ variable_name.attribute = x
- 使用C++获取程序的 ASM
- 在 c++ 中使用 x86 DIV 的这个 asm 块有什么用?
- 需要帮助调试"attribute parser"!C++ 来自黑客排名的问题
- g++ -O3 为 loop 创建了奇怪的指令 - 两个具有相同 asm 的版本
- Extern "C"错误在'int'之前'asm'或'__attribute__'
- 了解 C/C++ 中 Windows / MSVC 的一些反调试内联 asm
- 尝试使用 x86 asm SSSE3 将大端转换为小端序
- 如何使用"asm volatile"编写 btr 指令
- objdump 不显示机器代码,但显示 ASM
- 未使用的 asm() 在不受支持的体系结构上的行为
- 内联asm编译器屏障(内存阻塞器)是算作外部函数,还是算作静态函数调用
- std::mutex::lock() 产生奇怪(和不必要的)ASM 代码
- 为什么发出空asm命令会交换变量
- C++-更改另一个文件的ASM指令
- C++生成器 10.2 基于函数的优化状态"unknown attribute 'optimize' ignored"
- 尝试用纯 c 编程 arduino,得到以下错误:预期的"="、""、";",'asm'或"打印"之前的'__attribute__'|
- C++/ASM:按值传递使用 xmm0,但按引用使用 rdi
- 有人知道可以使用 c++ 以字节为单位编码 asm 字符串的任何东西吗?
- 优化了 VC++ 和 ASM 中的代码