class cippa{};
enum close{ cippa };
int main(){
new cippa(); //bad here
}
使用::cippa
也无济于事。有没有办法在不将enum
或class
放在单独的namespace
中的情况下解决此问题?
使用 new class cippa
消除歧义。如果在同一作用域中声明类名和枚举器(或函数/变量)名,则隐藏该类名。您可以通过 class name
.如果类型名称是枚举名称,则相同。您可以通过enum name
访问它
#include <unistd.h>
// oops, close is now hidden! but we know a trick..
enum close c = cippa;
使用 C++11,如果你这样做
class cippa;
enum class close { cippa };
那么类 cippa
和枚举值close::cippa
就不会冲突。
顺便说一下,这本质上是在做
class close{
public:
enum enum_t{cippa};
};
但是,您需要使用 close::enum_t
来访问枚举类型,而不是close
。 close::cippa
保持不变。