C 标识符枚举未定义
好的,我知道这是一个相当常见的问题,但我找不到一个与我的问题类似的问题 我总是和你有问题C 标识符枚举未定义,c,C,好的,我知道这是一个相当常见的问题,但我找不到一个与我的问题类似的问题 我总是和你有问题 identifier "Baserate" is undefined 我把它定义为 蒂姆·h 问题是当我定义它所用的函数时 tim_api.h extern void TIM_Set_Period_ns(int Timer_Select, Baserate Set_Baserate, int Period); 这是当我构建一个嵌入式c程序时,但当我在一个c控制台应用程序中运行它时,它会工作 void
identifier "Baserate" is undefined
我把它定义为
蒂姆·h
问题是当我定义它所用的函数时
tim_api.h
extern void TIM_Set_Period_ns(int Timer_Select, Baserate Set_Baserate, int Period);
这是当我构建一个嵌入式c程序时,但当我在一个c控制台应用程序中运行它时,它会工作
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)())
{
}
所以我的问题是,为什么相同的枚举基本速率在控制台应用程序中有效,而在嵌入式程序中无效 如果没有
typedef
您需要声明基准利率,如下所示
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;
在C语言中,您需要使用typedef enum Baserate{/*这里的值与前面一样*/}Baserate代码>
<>这是C和C++之间的细微差别之一。< / P >啊哈,这很有效,非常感谢。是否有一个原因在C++中被改变了?我怀疑这样做不会使使用<代码>类< /Cord> ES非常繁琐。如果C++没有这样的行为,那么你就必须编写<代码>类Myclass ANYObjase=新类MyCype();代码>到处。@ CursCIK:因为在C++中,他们利用这个机会清理了所有对C来说非常罕见的讨厌和不必要的想法。它不是问题,C TyPulf成语也在C++中工作,所以它是前向兼容的。一个更简单的解决方案可能是使用C++编译并享受所有其他好处。提姆.h包含TimyAPI。h之前定义了代码> BaseRATE < /C> >,但是TimyAPI .h使用 BaseRATE < /C>。你发布的代码是真的吗?你有一个循环依赖项,没有。
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;