### Incomplete Class Declarations

An incomplete class declaration is a class declaration that does not define any class members. You cannot declare any objects of the class type or refer to the members of a class until the declaration is complete. However, an incomplete declaration allows you to make specific references to a class prior to its definition as long as the size of the class is not required.

For example, you can define a pointer to the structure first in the definition of the structure second. Structure first is declared in an incomplete class declaration prior to the definition of second, and the definition of oneptr in structure second does not require the size of first:

    struct first;           // incomplete declaration of struct first

    struct second           // complete declaration of struct second
    {
          first* oneptr;    // pointer to struct first refers to
                            // struct first prior to its complete
                            // declaration

          first one;        // error, you cannot declare an object of
                            // an incompletely declared class type
          int x, y;
    };

    struct first            // complete declaration of struct first
    {
          second two;       // define an object of class type second
          int z;
    };

If you declare a class with an empty member list , it is a complete class declaration. For example:

    class X;                // incomplete class declaration
    class Z {};             // empty member list
    class Y
    {
    public:
          X yobj;           // error, cannot create an object of an
                            // incomplete class type
          Z zobj;           // valid
    };

Scope of Class Names

Declaring Class Objects
Class Member Lists