gpt4 book ai didi

c++ - 当命名空间和命名空间中的枚举共享一个名称时,为什么 C++ typedef 会抛出错误?

转载 作者:行者123 更新时间:2023-12-04 17:06:37 25 4
gpt4 key购买 nike

当我定义了一个枚举时:

    namespace ns
{
namespace Bar
{
static enum Foo {
VAL1,
VAL2,
VAL3
};
}
}

我可以用:
typedef ns::Bar::Foo Foo;

简化我代码中其他地方的参数类型。但是,当我将定义更改为:
namespace ns
{
namespace Foo
{
static enum Foo {
VAL1,
VAL2,
VAL3
};
}
}

并尝试使用:
typedef ns::Foo::Foo Foo;

我得到:
Error: enum 'ns::Foo::Foo' has no member 'Foo'

为什么是这样?

最佳答案

enum不创建自己的命名空间,因此 Intellisense 无法区分 ns::Foons::Foo::Foo .

解决方案是简单地坚持最上面的例子并删除 static :

namespace ns
{
namespace Bar
{
enum Foo {
VAL1,
VAL2,
VAL3
};
}
}

(因为 enum class 不可用)。

关于c++ - 当命名空间和命名空间中的枚举共享一个名称时,为什么 C++ typedef 会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51432450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com