c++ - 在 C 中管理枚举变量(从 C++ 移植代码)

标签 c++ c enums

我正在尝试将 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/

相关文章:

c - hp load runner 中的多线程

c++ - 在 C++ 程序中使用 C 链接时参数丢失

c# - 用于获取 2 个不同枚举的排列的最佳集合类型是什么

java - 无法在子类中调用 State 吗?

c++ - QT 和 OpenGL 的奇怪行为

c - 套接字:是什么导致 read() 返回 EINVAL?

c++ - 我怎样才能创建树?

angular - 使用对象字面量作为 TypeScript 枚举值

c++ - 定期从 mexFile 向 MATLAB 发送数据

c++ - 我们可以为每个类对象创建每个 boost 记录器实例吗?