Well sorry to tell you but no, there's no valid way of using a class where the compiler does not know the full definition.
I'm a bit unsure you misunderstood Hodgman however. You can safely declare pointers to classes which have been forward declared, but not instantiate them nor dereference and use them. So it's perfectly valid for you to forward declare ClassOne in ClassTwo's header file and have ClassTwo contain a ClassOne pointer as long as ClassOne has been forward declared before ClassOne is used in ClassTwo. But you cannot use the ClassOne class before it's been included. This is normally done in the start of the using .cpp file. This all sounds really confusing but it's not really - I've provided a small example.
#pragma once// Forward declarationclass ClassTwo;class ClassOne{private: ClassTwo* m_pkClassTwo;public: ClassOne();};
#pragma once// Forward declarationclass ClassOne;class ClassTwo{private: ClassOne* m_pkClassOne;public: ClassTwo();};
These are the headers. So far there's no use of the pointers. This is done in the cpp file as shown below.
#include "ClassOne.h"#include "ClassTwo.h" // <----------- This is the actual include so you can use the class.ClassOne::ClassOne(){ m_pkClassTwo = new ClassTwo;}
This is obviously plain C++, I don't know managed c++ but I take it the concepts are the same. Hope this helped.