[comp.std.c++] Can this be done?

hawley@ucrmath.ucr.edu (brian hawley) (10/03/90)

Suppose I have the following class definition:

class Symbol {
      public:
			   int a;       // in real life, this data area more complex
			   char b;
			   int c;

			   Symbol();
			   ~Symbol()
			   // and others
          }

Now, I want to set up a data area (separate from this), for prefilling
of this data.  In c, this would have been a struture, and I could have
just said: (of course the functions wouldn't be in the structure)
		   struct Symbol *temp;

I realize it isn't much extra space, but in c++ you also have the 
pointers to the intrinsics, so if I were to "new Symbol", I would
be mallocing extra space for those too.  I would like to avoid
doing that.  My first thought was to do something like:

class Symbol {
      public:
		  struct node {
			   int a;       // in real life, this data area more complex
			   char b;
			   int c;
            }
			   Symbol();
			   ~Symbol()
			   // and others
          }

And then try to declare something like "Symbol::node *temp", or other
alternatives along those lines like "symbol = new Symbol(); 
									 symbol->node *temp;"
However, both of those are invalid in c++ delcarations.

What I'm wondering is if there is a way to accomplish what I want, without
having to make a new instance of the class, or having to pull the structure
outside of the class declaration?

Any answers/suggestions?

Please e-mail them to hawley@ucrmath.ucr.edu

Thanks,
Brian


------------------------------------------------------------------------------
Brian N. Hawley                            Internet: hawley@ucrmath.ucr.edu
Dept. of Math & Computer Science           uucp: {ucsd, uci}!ucrmath!hawley
Univ. of Calif., Riverside, CA 92521       phone: (714) 787-4645

shankar@hpclscu.HP.COM (Shankar Unni) (10/06/90)

Brian Hawley:

> class Symbol {
>       public:
> 		  struct node {
> 			   int a;       // in real life, this data area more complex
> 			   char b;
> 			   int c;
>             }
> 			   Symbol();
> 			   ~Symbol()
> 			   // and others
>           }
> 
> And then try to declare something like "Symbol::node *temp", or other
> alternatives ...

"Symbol::node *temp" is perfectly valid code with C++ 2.1.
----
Shankar Unni.