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; };
However, 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 };
Related References