You can not use forward declarations in any of those cases as the compiler needs to know the size of the class.
You can only use forward declaration in a set of operations:
- declaring functions that take the forward declared class as parameters or returns it
- declaring member pointers or references to the forward declared class
- declaring static variables of the forward declared type in the class definition
You cannot use it to
- declare a member attribute of the given type (compiler requires size)
- define or create an object of the type or delete it
- call any static or member method of the class or access any member or static attribute
At the end, the advice that was given to you by Roddy: forward declare as much as you can, but assume that some things must be included.