Query *pquery = new NameQuery( "Glass" );
pquery->eval();
if ( NameQuery *pnq =
dynamic_cast< NameQuery* >( pquery )) ...
Query class hierarchy picture below is:
class Query { ... };
class AndQuery : public Query { ... };
class OrQuery : public Query { ... };
class NotQuery : public Query { ... };
class NameQuery : public Query { ... };

// This case reports a error
class Query;
class NameQuery : public Query {
...
};
// error: a forward declaration must not include
// the derivation list of the derived class
class NameQuery : public Query;
The correct forward declaration is as follows:
class Query;
class NameQuery;