U MainPanel.h imaš #include "B.h" i "D.h", mada u hederu koristiš samo pointere na klase. Premesti ta dva include-a u MainPanel.cpp i izbildovaće se. Inače, evo šta dobiješ kad uključiš opciju /showIncludes za A.cpp:
Code:
1>Compiling...
1>A.cpp
1>Note: including file: c:\documents and settings\mihajlo cvetanovic\desktop\headertest\headertest\A.h
1>Note: including file: c:\documents and settings\mihajlo cvetanovic\desktop\headertest\headertest\MainPanel.h
1>Note: including file: c:\documents and settings\mihajlo cvetanovic\desktop\headertest\headertest\B.h
1>Note: including file: c:\documents and settings\mihajlo cvetanovic\desktop\headertest\headertest\A.h
1>Note: including file: c:\documents and settings\mihajlo cvetanovic\desktop\headertest\headertest\MainPanel.h
1>c:\documents and settings\mihajlo cvetanovic\desktop\headertest\headertest\b.h(10) : error C2504: 'clsA' : base class undefined
1>Note: including file: c:\documents and settings\mihajlo cvetanovic\desktop\headertest\headertest\D.h
1>Note: including file: c:\documents and settings\mihajlo cvetanovic\desktop\headertest\headertest\A.h
1>Note: including file: c:\documents and settings\mihajlo cvetanovic\desktop\headertest\headertest\MainPanel.h
1>c:\documents and settings\mihajlo cvetanovic\desktop\headertest\headertest\d.h(10) : error C2504: 'clsA' : base class undefined
1>Note: including file: c:\documents and settings\mihajlo cvetanovic\desktop\headertest\headertest\MainForm.h
1>Note: including file: c:\documents and settings\mihajlo cvetanovic\desktop\headertest\headertest\MainPanel.h
U ovom slučaju kompajlira se A.cpp, pa uđe u A.h, odakle uđe u MainPanel.h, odakle uđe u B.h, odakle uđe u A.h, ali sad je A_H definisan (jer je već jednom ušao u A.h) tako da kompajler ništa tu ne vidi. Pošto deklaracija klase clsA nije vidljiva onda kad izađe iz A.h i vidi pozivanje na clsA u deklaraciji od clsB kompajler javlja grešku.
Dešava se ciklično inkludovanje koje si hteo da sprečiš sa #ifdef ogradama, što ne može da radi. Ciklično inkludovanje se sprečava tako što ga ukineš. Nepotpuna deklaracija klasa u MainPanel.h je to rešenje, samo još treba #include direktive da se prebace u MainPanel.cpp