Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Header file-lovi - organizacija i pravila za inkludovanje

  • 3 odgovora
  • 1.981 pregleda

Najnovija ↓

Header file-lovi - organizacija i pravila za inkludovanje 02.11.2009. u 14:41 · pre 206 meseci #1
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.
Re: Header file-lovi - organizacija i pravila za inkludovanje 02.11.2009. u 16:34 · pre 206 meseci
izmenjeno 1 put, poslednji put SkyDiverX 02.11.2009. u 16:46
  1. SkyDiverX02.11.2009. u 16:46zapis iz teksta poruke
#2
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.
Re: Header file-lovi - organizacija i pravila za inkludovanje 02.11.2009. u 17:55 · pre 206 meseci #3
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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme