devxlogo

Circular Pointers

Circular Pointers

Question:
I’m trying to make two classes point to one another. I know the syntax is weird, but it’s just to illustrate:

 class x{ y* ptry; }class y{ x* ptrx; }

It won’t compile. I get the error “missing storage class.” How do I get around this?

Answer:
You need to forward-declare a class before you can create a pointer to it:

 class y; //fwd declarationclass x{ y* ptry; };class y{ x* ptrx; };

Without the forward declaration, the compiler doesn’t recognize y as a class name because the declaration of y hasn’t been seen. A forward declaration instructs the compiler to accept the pointer definition even if it hasn’t seen yet the declaration of y. Note that you don’t need a forward declaration for ptrx because by the time the compiler sees its definition, class x has already been seen.

devx-admin

Share the Post: