标识符枚举未定义

时间:2014-03-14 18:19:27

标签: c

好的,我发现这是一个相当常见的问题,但我找不到与我的问题类似的问题。

我一直遇到问题

identifier "Baserate" is undefined

我将其定义为

tim.h

#include "tim_api.h"
enum Baserate {
 Rate_62_5ns = 0x0,
 Rate_125ns = 0x1,  
 Rate_250ns = 0x2,  
 Rate_500ns = 0x3, 
 Rate_1us = 0x4,    
 Rate_2us = 0x5,    
 Rate_4us = 0x6,    
 Rate_8us = 0x7,    
 Rate_16us = 0x8
};

问题是当我定义

中使用的函数时

tim_api.h

extern void TIM_Set_Period_ns(int Timer_Select, Baserate Set_Baserate, int Period);  

这是我正在构建一个嵌入式c程序,但是当我在一个c consol应用程序中运行它时它可以工作

void TIM_Enable(Baserate my_baserate, void (*callback_function)());
int _tmain(int argc, _TCHAR* argv[])
{
TIM_Enable(Rate_62_5ns,prnt0);  
while(1);
return 0;
}


void TIM_Enable(Baserate my_baserate,void (*callback_function)())
{
}

所以我的问题是为什么相同的枚举基础在控制台应用程序中工作,但在嵌入式程序中不起作用。

2 个答案:

答案 0 :(得分:3)

如果没有typedef,您需要按如下方式声明Baserate

enum Baserate {
    Rate_62_5ns = 0x0,
    Rate_125ns = 0x1,  
    Rate_250ns = 0x2,  
    Rate_500ns = 0x3, 
    Rate_1us = 0x4,    
    Rate_2us = 0x5,    
    Rate_4us = 0x6,    
    Rate_8us = 0x7,    
    Rate_16us = 0x8
};

enum Baserate a_rate = 0x6;

使用typedef

typedef enum {
    Rate_62_5ns = 0x0,
    Rate_125ns = 0x1,  
    Rate_250ns = 0x2,  
    Rate_500ns = 0x3, 
    Rate_1us = 0x4,    
    Rate_2us = 0x5,    
    Rate_4us = 0x6,    
    Rate_8us = 0x7,    
    Rate_16us = 0x8
} Baserate;

Baserate a_rate = 0x06;

答案 1 :(得分:3)

在C中,您需要使用typedef enum Baserate {/*your values here as before*/} Baserate;

这是C和C ++之间的细微差别之一。