[ BinaryRuler @ 02.11.2009. 13:41 ] @
Imam problem sa inkludovanjem Header fajlova. Naterao sam aplikaciju da se kompajlira doduse sa malo cudnim redosledom inkludovanja. Imam 10 -tak kasa i svaka ima svoj *.h i *.cpp fajl. neke od njih se nasledjuju. Tu se i javio problem, poceo je da javlja da mi nije definisana bazna klasa, a lepo sam inkludovao header fajl bazne klase cak sam je i unapred deklarisao (forward declaration).

Kao sto rekoh naterao sam ga da radi sa malo nelogicnim nacinom inkludovanja, pa me intereduje zasto se to desava, da ne bi doslo ponovo do slicnog problema.

daj te neku pomoc link bilo sta, ja nisam uspeo da nadjem nista adekvatno.
[ BinaryRuler @ 02.11.2009. 15:34 ] @
Evo uspeo sam da simuliram problem

http://www.mediafire.com/?sharekey=04be2b5814e56734d956df2962098fcbe04e75f6e8ebb871

U fajlu A.h sam oznacio liniju koja kada se komentarise projekat moze da se kompajlira.

[Ovu poruku je menjao SkyDiverX dana 02.11.2009. u 16:46 GMT+1]
[ Mihajlo Cvetanović @ 02.11.2009. 16:55 ] @
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
[ BinaryRuler @ 02.11.2009. 17:31 ] @
Hvala na odgovoru.
Delimicno sam razumeo, nemam predstavu sta se tacno desava kada se kompajlira, tako da sam siguran da ce mi se ponoviti problem.