c/c++:enum和class重名问题

File : None
Type : c/c++
Brief : C++中enum和class重名的时候,会有一个很坑人的提示。

typedef enum MyEnum
{
    Foo,
}MyEnum;

class Foo{
public:
    Foo() {}
    ~Foo() {}
};

int main()
{
    Foo w;
    return 0;
}
问题很简单,**如果enum中的元素与class的重名了**,c++编辑器(我试过g++和vc)的错误提示是这样的:

error C2146: 语法错误: 缺少“;”(在标识符“w”的前面)
error C2065: “w”: 未声明的标识符

如果enum和class的声明不在同一个文件,而是通过头文件include来的,看到这样的提示,压根就不知道从哪查起。
特别是如果习惯了像下面那样使用enum的话,更加不会想到往enum查问题。

MyEnum fc = MyEnum::Foo

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 [ yehuohan@gmail.com ]

文章标题:c/c++:enum和class重名问题

本文作者:Y

发布时间:2017-10-02, 23:10:37

最后更新:2019-05-21, 20:06:11

原始链接:http://yehuohan.github.io/2017/10/02/Gist/c&c++/Cpp%E4%B8%ADenum%E4%B8%8Eclass%E9%87%8D%E5%90%8D%E9%97%AE%E9%A2%98/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。