【发布时间】:2014-08-25 17:58:07
【问题描述】:
使用此编译器 Apple LLVM 5.1 (clang-503.0.40) 时出现以下错误
代码在这里
测试.h
class media
{
public:
typedef enum
{
audio,
video,
text,
data
}mediatype;
};
test.cpp
#include "test.h"
int main()
{
enum media::mediatype medias[] = {media::audio, media::video};
for (int i=0; (i < sizeof(medias) / sizeof(enum media::mediatype)); ++i)
{
}
}
test.cpp:5:15: 错误:详细类型指的是 typedef 枚举 media::mediatype medias[] = {media::audio, media::video};
test.cpp:6:58: 错误:对“媒体类型”的引用不明确 for (int i=0; (i
如果我删除 enum 关键字如下代码编译
#include "test.h"
int main()
{
media::mediatype medias[] = {media::audio, media::video};
for (int i=0; (i < sizeof(medias) / sizeof(media::mediatype)); ++i)
{
}
}
有人能说说为什么clang会抱怨吗
谢谢
【问题讨论】:
-
消息不是说到底出了什么问题吗?你到底为什么要首先定义枚举?!
-
mediatype枚举不是您可以接受大小的成员。如果您想知道特定enum中有多少枚举,可以添加一个额外的枚举,其值是枚举的数量。 -
该标头中该枚举的定义来自现有库,因此我没有对它进行类型定义
-
您的编译器支持 C++11。当你可以做
for(auto& m : medias) { }时,绝对不需要旧的 sizeof 技巧