类名和枚举值之间的冲突:无需命名空间即可解析
clash between class name and enum value: resolvable without namespaces?
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
保持不变。
相关文章:
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- C++ |匿名命名空间与命名空间 std 冲突
- 分解SWIG Python接口 - 容器会产生命名空间冲突
- 如何解决两个不使用命名空间的第三方库之间的类名冲突?
- 调用 ADL 时,表达式和命名空间之间是否会发生冲突
- 类名和枚举值之间的冲突:无需命名空间即可解析
- C++当命名空间、类名和命名空间::类名冲突时该怎么办
- C++ 中的命名空间冲突
- 避免与具有相同名称的两个类发生命名空间冲突
- 命名与多个命名空间冲突
- 命名空间中的类名冲突
- ctime std::命名空间冲突
- 如何避免 C 和 C++ 中的命名空间冲突
- C++ 当命名空间发生冲突时,为什么结构/类不与变量和函数发生冲突?
- 我收到void main()和使用命名空间std;之间的冲突;?我正在使用代码块
- 全局作用域枚举和命名空间冲突
- 如何解决c++中的命名空间冲突?
- 不明确的引用和命名空间(来自两个外部库的定义冲突)
- 命名空间,类成员ADL冲突
- 在c++中命名命名空间的最佳方法//当名称冲突时该怎么做