我正在尝试将 c++ 代码移植到 msp430 c 代码。 因为我从来没有遇到过枚举类型,所以我很难理解如何管理它。 此代码由 Taylor Andrews 编写: 枚举列表定义为:
enum accel_odr
{
A_POWER_DOWN, // Power-down mode (0x0)
A_ODR_3125, // 3.125 Hz (0x1)
A_ODR_625, // 6.25 Hz (0x2)
A_ODR_125, // 12.5 Hz (0x3)
A_ODR_25, // 25 Hz (0x4)
A_ODR_50, // 50 Hz (0x5)
A_ODR_100, // 100 Hz (0x6)
A_ODR_200, // 200 Hz (0x7)
A_ODR_400, // 400 Hz (0x8)
A_ODR_800, // 800 Hz (9)
A_ODR_1600 // 1600 Hz (0xA)
};
而我的是:
typedef enum
{
A_POWER_DOWN, // Power-down mode (0x0)
A_ODR_3125, // 3.125 Hz (0x1)
A_ODR_625, // 6.25 Hz (0x2)
A_ODR_125, // 12.5 Hz (0x3)
A_ODR_25, // 25 Hz (0x4)
A_ODR_50, // 50 Hz (0x5)
A_ODR_100, // 100 Hz (0x6)
A_ODR_200, // 200 Hz (0x7)
A_ODR_400, // 400 Hz (0x8)
A_ODR_800, // 800 Hz (9)
A_ODR_1600 // 1600 Hz (0xA)
}accel_odr;
在头文件中他定义了一个与枚举相关的变量:
uint16_t begin( accel_odr aODR = A_ODR_50);
执行此操作,在编译时出现错误:
描述资源路径位置类型
18 期望一个“)”LSM9DS0.c/ACC line 130 C/C++ Problem
和
描述资源路径位置类型
256 type name is not allowed main.c/ACC line 45 C/C++ Problem
我错过了什么??我尝试将函数内的值分配为:
uint16_t begin( accel_odr aODR);
aODR = A_ODR_50;
但我没有解决问题。
最佳答案
uint16_t begin( accel_odr aODR = A_ODR_50);
这不是一个变量声明,它是一个带default argument value 的函数声明. C++有默认参数,但C没有默认参数特性。
您可以在 C 中将其声明为:
uint16_t begin(accel_odr aODR);
如果有任何不带参数的调用,如 begin();
,将它们替换为 begin(A_ODR_50);
。
关于c++ - 在 C 中管理枚举变量(从 C++ 移植代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33869600/