class cippa{};
enum close{ cippa };
int main(){
new cippa(); //bad here
}
使用::cippa
也无济于事。有没有办法解决这个问题,而无需将enum
或class
放在单独的namespace
中?
答案 0 :(得分:4)
使用new class cippa
消除歧义。如果在同一范围内声明了类名和枚举器(或函数/变量)名称,则隐藏类名。您可以class name
访问它。如果类型名称是枚举名称,则相同。您可以通过enum name
#include <unistd.h>
// oops, close is now hidden! but we know a trick..
enum close c = cippa;
答案 1 :(得分:1)
使用C ++ 11,如果你这样做
class cippa;
enum class close { cippa };
然后课程cippa
和枚举值close::cippa
不会发生冲突。
顺便说一下
class close{
public:
enum enum_t{cippa};
};
但是,您需要使用close
代替close::enum_t
来访问枚举类型。
close::cippa
保持不变。