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 };