typedef enum的一点问题

llsll21 2010-08-10 06:00:40
今天看到别人的代码中有这样一段:
#ifndef ...
#define ...
typedef enum TextType
{
TM_ENGLISH_ABC,
TM_ENGLISH_abc,
TM_NUMBER,
TM_SYMBOL,
TM_PINYIN
}TextType;


class a
{
......
}

#endif

对其中红色的代码有点疑惑,enum不是已经可以实现定义一种数据类型了吗?为什么前面还要加上typedef?前面这个typedef是必须的吗?还是在这里加不加无所谓?
...全文
2789 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
kevin_growup 2012-08-03
  • 打赏
  • 举报
回复
长见识了。。。。
zhangzhang1818 2011-12-29
  • 打赏
  • 举报
回复
你的逗号应该是有问题吧
YUHONGNANA 2011-12-20
  • 打赏
  • 举报
回复
顶起来,我也出现和16楼一样的问题了。。。

我只是简单定义了一个枚举类型:

typedef enum {
false = 0,
true = 1
}bool;

这个文件就只有这几句!
就出现了如下错误:

error C2143: 语法错误 : 缺少“}”(在“常量”的前面)
error C2143: 语法错误 : 缺少“;”(在“}”的前面)
error C2059: 语法错误 : “}”

谁帮忙看看咋解决啊???
wwwwoshidami 2011-12-04
  • 打赏
  • 举报
回复
程序:
typedef enum {
ERROR = -1,
EMPTY,
STRING,
INT,
DOUBLE
}ValueType;
错误:
1>d:\ptc\prowildfire4.0\protoolkit\protk_appls\includes\testmfgnew.h(45) : error C2143: 语法错误 : 缺少“}”(在“常量”的前面)
1>d:\ptc\prowildfire4.0\protoolkit\protk_appls\includes\testmfgnew.h(50) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
1>d:\ptc\prowildfire4.0\protoolkit\protk_appls\includes\testmfgnew.h(50) : error C2059: 语法错误 : “}”
我查看了枚举定义是规范的,但是为什么提示错误呢?
aweiname2008 2011-09-24
  • 打赏
  • 举报
回复
里面是值是不是从0开始自动赋值
如果不初始化赋值的话?
rolax 2010-08-11
  • 打赏
  • 举报
回复

typedef struct MyStruct
{
unsigned int unBand;
float fLineLoss;
BOOL bDownLink;
DWORD dwFreq;
}TEST_PARAM,*pTEST_PARAM;


typedef enum MyEnum
{
WCDMA_2100 = 0,
WCDMA_1900A,
WCDMA_1800,
WCDMA_1700,
AWS_1700,
WCDMA_900,
WCDMA_850
}TEST_BAND,*pTEST_BAND;


enum MyEnum TestBand = WCDMA_2100;
TEST_BAND Band = WCDMA_2100;
pTEST_BAND *pBand = NULL;
Band = WCDMA_2100;



蜥蜴枪王 2010-08-10
  • 打赏
  • 举报
回复
学习了~~
arong1234 2010-08-10
  • 打赏
  • 举报
回复
再C中这是很有必要的
如果没有typedef,C要求你定义变量时使用
enum TextType a;

如果有typedef,少写个enum
管哥的天下 2010-08-10
  • 打赏
  • 举报
回复
你 想要 另命名。或是 增加此类型 指针时,直接往后面加上就可以了。这是习惯问题。
如:
typedef enum TextType
{
...
}TextType, *PTextType, TheTextType;
freshui 2010-08-10
  • 打赏
  • 举报
回复
typedef 从字面意思上就是定义一个type, 当定义了一个类型后,就可以用这个自定义类型来作为返回值或参数了,如果没有定义, 那个enum的整体只能用 int代替,不直观也不方便编译器检查。

typedef enum TextType
{
TM_ENGLISH_ABC,
TM_ENGLISH_abc,
TM_NUMBER,
TM_SYMBOL,
TM_PINYIN
}TextType;

可以写这样的函数:

TextType what_type(TextType thistype, TextType thattype)
{
...
}
zhangzhongke007 2010-08-10
  • 打赏
  • 举报
回复
楼上好详细,复习了一遍。
  • 打赏
  • 举报
回复
针对C的规则而来的省事办法

C里面定义enum变量的时候必须加enum
enum TextType
{
TM_ENGLISH_ABC,
TM_ENGLISH_abc,
TM_NUMBER,
TM_SYMBOL,
TM_PINYIN
};
int main()
{
enum TextType x;//ok
TextType y;//error
}


typedef enum TextType
{
TM_ENGLISH_ABC,
TM_ENGLISH_abc,
TM_NUMBER,
TM_SYMBOL,
TM_PINYIN
}TextType;

int main()
{
enum TextType x;//ok
TextType y;//ok
}
yzx714 2010-08-10
  • 打赏
  • 举报
回复
typedef enum TextType 这里的TextType叫做标签名
{
TM_ENGLISH_ABC,
TM_ENGLISH_abc,
TM_NUMBER,
TM_SYMBOL,
TM_PINYIN
}TextType; 这里的TextType叫做类型名
yzx714 2010-08-10
  • 打赏
  • 举报
回复
没加typedef时,你要定义一个就得enum TextType obj;
加了typedef后,就可以省略掉enum,直接TextType obj;
struct也一样
wing_0706 2010-08-10
  • 打赏
  • 举报
回复
typedef enum TextType
{
...
}MyTextType, *PTextType;
对于你的应该是加不加都无所谓的,,,,
k80179279 2010-08-10
  • 打赏
  • 举报
回复
当你 想要 另命名。或是 增加此类型 指针时,直接往后面加上就可以了。这是习惯问题。
如:
typedef enum TextType
{
...
}TextType, *PTextType, TheTextType;
老T 2010-08-10
  • 打赏
  • 举报
回复
你对C了解吗?在这里这个是加不加无所谓的。
hengshan 2010-08-10
  • 打赏
  • 举报
回复
对于你这段代码加不加都可以,但是如果做类似下面的定义,那么需要typedef

typedef enum TextType
{
....
}MyTextType;
liutengfeigo 2010-08-10
  • 打赏
  • 举报
回复
你编译一下不是知道了

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧