c++ - Why does named union inside struct overwriting other struct members? -


struct teststruct {        int a;     int b;      union     {         char c[2];         int d;     }; };  teststruct instance; 

if do

instance.a = 100;  instance.b = 200;  instance.d = 300; 

everything's fine.

but, if give union name:

struct teststruct {        int a;     int b;      union zzz // note here!!     {         char c[2];         int d;     }; };  teststruct instance; 

and same things again:

instance.a = 100; instance.b = 200; instance.zzz::d = 300; 

then

instance.zzz::d = 300; 

is overwriting instance.a 300, why?!

additionally, can not see union members in debugger watch list if has name.

i using visual studio 2008.

when name union there no longer data member in class corresponding d instance.zzz::d = 300; doesn't mean anything. (with vs2012 "error c2039: 'zzz' : not member of 'teststruct'")

to have member of union type you'll have give name.

struct teststruct {        int a;     int b;      union zzz // note here!!     {         char c[2];         int d;     } z; };  instance.a = 100; instance.b = 200; instance.z.d = 300; 

c++ has special rule 'anonymous unions', unnamed union type of form union { member-specification }; creates unnamed object. names of union's members injected enclosing scope , access unnamed object's members.

that's you're getting when don't name union type inside class. give type name union no longer matches special rule , there's no longer unnamed union member in class; have add union data member normally, naming member variable.


Comments

Popular posts from this blog

java.util.scanner - How to read and add only numbers to array from a text file -

rewrite - Trouble with Wordpress multiple custom querystrings -

php - Accessing static methods using newly created $obj or using class Name -