Вам необходимо переместить все членские права доступа из заголовка в исходные файлы.
Таким образом, вы можете заранее объявить ваши классы в заголовке и определить их в foo:
// foo.h
class bar;
class foo {
bar * m_pbar;
}
// bar.h
class foo;
class bar {
foo * parent;
}
Это позволит вам работать - вы просто не можете поместить определения, требующие информацию об участнике, в свой заголовок - переместите его в файл .cpp. Файлы .cpp могут включать как foo.h, так и bar.h:
// Foo.cpp
#include "foo.h"
#Include "bar.h"
void foo::some_method() {
this->m_pbar->do_something(); // Legal, now, since both headers have been included
}