gpt4 book ai didi

C++ 类型定义和枚举

转载 作者:可可西里 更新时间:2023-11-01 16:38:50 25 4
gpt4 key购买 nike

我正在尝试将一个命名空间中的枚举的别名引入另一个命名空间。虽然我可以声明别名类型的变量,但编译器 (gcc 4.1.2) 不会识别任何枚举值。

namespace A
{
enum a { One = 1, Two = 2 };
}

namespace B
{
typedef enum A::a b;
};

A::a a_value = A::One; // Pretty standard
B::b b_value = B::One; // Does not work
B::b c_value = A::One; // Clearly B is a typedef for A

int main (int argc, const char *argv[])
{
return 0;
}

编译错误是

test.cc:12: 错误: 'One' 不是 'B' 的成员。

最佳答案

虽然在 B 中可以通过 b 访问枚举类型,但不能且必须显式引入值:

namespace B {
typedef A::a b;
using A::One;
}

我不认为没有单独的 using 语句就可以将它们全部引入,除非你 using namespace A; 或将枚举放入内联命名空间并为此使用 using 语句。如果您担心引入所有 A 并且仍然希望仅使用带有 A::value 的枚举值,则后者可能更可取。这是一个例子:

namespace A
{
inline namespace en {
enum a { One = 1, Two = 2 };
}

enum c {Three};
}

namespace B
{
using namespace A::en;
typedef A::a b;
}

A::a a_value = A::One; // works; things in en are still visible in A
B::b b_value = B::One; // works; en was brought into B
B::b c_value = A::One; // works
A::c meh = B::Three; //fails; only en was brought into B

请注意,内联命名空间是在 C++11 中引入的,GCC 4.1.2 不支持它。如果可以,我强烈建议升级。最新的稳定版本是 4.8.1。

关于C++ 类型定义和枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17097957/

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