Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Header file-lovi - organizacija i pravila za inkludovanje

[es] :: C/C++ programiranje :: Header file-lovi - organizacija i pravila za inkludovanje

[ Pregleda: 1534 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

BinaryRuler

Član broj: 73518
Poruke: 189
79.101.209.*



+3 Profil

icon Header file-lovi - organizacija i pravila za inkludovanje02.11.2009. u 13:41 - pre 176 meseci
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.
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
79.101.209.*



+3 Profil

icon Re: Header file-lovi - organizacija i pravila za inkludovanje02.11.2009. u 15:34 - pre 176 meseci
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]
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Header file-lovi - organizacija i pravila za inkludovanje02.11.2009. u 16:55 - pre 176 meseci
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
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
79.101.209.*



+3 Profil

icon Re: Header file-lovi - organizacija i pravila za inkludovanje02.11.2009. u 17:31 - pre 176 meseci
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.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Header file-lovi - organizacija i pravila za inkludovanje

[ Pregleda: 1534 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.