gpt4 book ai didi

c++ - 如何将匿名 union 与枚举一起使用?

转载 作者:行者123 更新时间:2023-11-30 04:03:47 25 4
gpt4 key购买 nike

当我使用匿名 union 时,如何正确访问成员数据和枚举符号?匿名 union 的全部要点就是省去了一层层次结构,使源代码不那么粗糙。我可以通过使用类型名称和成员名称命名 union 来解决此问题,但我不想这样做。

这是 VS2012。令人惊讶的是,编译器不会接受它,但 Intellisense 会接受它!

struct A
{
struct C {
enum {M,N,O} bar;
} c;
union {
struct B {
enum { X,Y,Z} foo;
} b;
};
};

void test(void) {
A a;
a.c.bar = A::C::M; // this works
a.b.foo = A::B::X; // this doesn't
}

给出这些信息

1>test.cpp(85): error C3083: 'B': the symbol to the left of a '::' must be a type
1>test.cpp(85): error C2039: 'X' : is not a member of 'A'
1> test.cpp(71) : see declaration of 'A'
1>test.cpp(85): error C2065: 'X' : undeclared identifier

理想情况下,我想使用匿名/未命名结构(这在某些编译器中确实有效,尽管我意识到它不是标准的 C++)

struct A
{
union {
struct {
enum { X,Y,Z} foo;
int x;
} ;
struct {
enum { M,N,O} bar;
double m;
} ;
};
};

void test(void) {
A a1;
a1.bar = A::M;
a1.x = 1;

A a2;
a2.foo = A::X;
a2.m = 3.14;
}

最佳答案

如果我正确理解你的问题,这应该有效:

struct A
{
struct B {
enum { X,Y,Z} foo;
int x;
};
struct C {
enum { M,N,O} bar;
double m;
};
union {
B b;
C c;
};
};

关于c++ - 如何将匿名 union 与枚举一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24193389/

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