Dato che CObject3D compare solo come puntatore basta una forward declaration per accontentare il compilatore.
Perché lo ha fatto? Forse per evitare riferimenti circolari o forse per tenere pulito il più possibile il codice.