2012-07-11 106 views
4

我有这个简单的代码:Ç枚举:未知类型名称

#include <stdio.h> 
#include <time.h> 

int main(){ 
    enum Days { asd=0,Lun,Mar,Mer,Gio,Ven,Sab,Dom }; 
    Days TheDay; 
    time_t ltime; 
    struct tm *Tm; 

    ltime=time(NULL); 
    Tm=localtime(&ltime); 
    int j = Tm->tm_wday; 
    TheDay = Days(j); 

    printf("[%d] %d/%d/%d, %d:%d:%d\n", 
      TheDay, /* Mon - Sun */ 
      Tm->tm_mday, 
      Tm->tm_mon, 
      Tm->tm_year+1900, 
      Tm->tm_hour, 
      Tm->tm_min, 
      Tm->tm_sec); 
} 

我不明白为什么我得到这个错误:

try.c:6:5: error: unknown type name ‘Days’

+0

'天(j)'坏在c – BLUEPIXY 2012-07-11 15:32:11

+0

我该怎么办? – polslinux 2012-07-11 17:27:26

+0

在将枚举值作为int处理时使用。没有意义'int j = Tm-> tm_wday; TheDay = Days(j);'only'Tm-> tm_wday'。或做功能。 – BLUEPIXY 2012-07-12 01:09:38

回答

19

这不是C:

enum Days { asd=0,Lun,Mar,Mer,Gio,Ven,Sab,Dom }; 
Days TheDay; 

新类型的名称是enum Days而不是Days(它是枚举标记)。

你必须使用:

enum Days { asd=0,Lun,Mar,Mer,Gio,Ven,Sab,Dom }; 
enum Days TheDay; 

或使用typedef:

typedef enum Days Days; 

能够使用Days作为一个类型名称。

+3

也'typedef枚举{...}天;'。 – You 2012-07-11 15:34:32

+1

此外,提问者可能习惯于C++,其中'enum Days'将Days声明为类型名称以及枚举。 – 2012-07-11 15:38:00