Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 标识符枚举未定义_C - Fatal编程技术网

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;