Re: Struct inside a struct, annonymous?
eselk@surfbest.net wrote:
I have a struct defined like this:
typedef struct
{
int file_handle;
int x;
int y;
} BaseFiles;
So, that's an anonymous struct for which you defined an alias,
'BaseFiles'. Why don't you use the normal C++ way? How about
you begin by changing this to
struct BaseFiles
{
int file_handle;
int x;
int y;
};
I'd basicly like to "sub-class" this structure so that I can add a
couple of members to the end of it, but still use the BaseFiles
members when it is typecast to a BaseFiles pointer.
This works with the Borland C compiler, but the C++ compiler doesn't
like it.
typedef struct
{
BaseFiles;
What is that supposed to do? AFAIK, it's a syntax error in C++.
int z;
} Files3D;
I can then use this code:
Files3D f;
f.x = 10;
f.y = 20;
f.z = 30;
And something like this (but less ugly) works also:
((BaseFiles*)&f)->x = 10;
That's not C++. In C++ this produces undefined behaviour, AFAICT.
Is there any way to achieve the same thing in C++?
Yes, it's called "inheritance".
From the help file
I know this exact method isn't supported:
"A Microsoft extension to [..]"
Yes, well, we don't discuss extensions here. Sorry.
For now I have this:
typedef struct
{
int file_handle;
int x;
int y;
int z;
} Files3D;
Which works, but if BaseFiles ever changes, I have to change Files3D
also, or I could end up with bugs.
That's why you should do
struct BaseFiles
{
int file_handle;
int x;
int y;
};
struct Files3D : BaseFiles
{
int z;
};
Keep in mind I have lots of legacy code that uses BaseFiles. Just
looking for a simple way to do this, if possible, but if it requires
changing a bunch of my other code, I'll stick with the kludge or maybe
just add the extra member to the BaseFiles struct.
If you're porting (and that's what you should be doing), then you just
need to make sure the rest of the code compiles, and fix the code if it
does not (or /where/ it does not). If you need both types to work in
both C *and* C++, you're most likely out of luck AFA *portable* and
*standard* C++ is concerned.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask