[VC6] Geneste includes?

Pagina: 1
Acties:

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Topicstarter
Ik heb voor mijn project een 'hoofd-include', waarin weer andere files ge-include worden. Zo bijvoorbeeld:

bert.h (hoofd-include)
code:
1
2
3
4
#include <stdio.h>

#include "include/predefs.h"
#include "include/pruts.h" // class CPruts

Goed, alles leuk en wel, maar in pruts.h staat het volgende:
code:
1
2
3
4
5
6
7
8
9
class CPruts
{
public:
   CPruts();
   ~CPruts();

protected:
   FILE *m_pfFile;
};

Goed, vervolgens is er pruts.cpp:
code:
1
2
3
4
#include <bert.h>
// de include werkt op zich wel, daar krijg ik geen melding over

// ...

Ik krijg nou een foutmelding bij (onder andere) FILE *m_pfFile: missing storage-class or type specifiers (C2501)

Euh... :? Lijkt wel alsof #include <stdio.h> gewoon is genegeerd...

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • DolleDries
  • Registratie: Oktober 2000
  • Laatst online: 22-08 11:46
klopt stdio header moet je ook opnemen in je pruts header :)
de headers werken in het bestand waar ze staan. dus in headers in je cpp hebben geen invloed op headers in je header. Als je begrijpt wat ik bedoel :?

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Topicstarter
Hmm... Is dan wel vaag, want om bijvoorbeeld alle Windows-functies te includen hoef je alleen maar #include <windows.h> te doen, niet al die bestanden die daar weer geinclude worden. Het vreemde (en waarschijnlijk irritante) is dat ik het wel gewoon kan in GNU C++. :(

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:44
Op dinsdag 21 mei 2002 11:42 schreef DolleDries het volgende:
klopt stdio header moet je ook opnemen in je pruts header :)
de headers werken in het bestand waar ze staan.
edit:

Verder lijkt het alsof je een cyclische afhankelijkheid hebt. Of heb je stiekum #ifndef FILETJE_H, #define FILETJE_H regels in je headerfiles staan die je hebt weggehaald voor 't voorbeeld?

Het is trouwens netter om eigen gemaakte headers met "" (ipv <>) te includen. Ofwel je hebt nu je lokale directory (of de directory waar bert.h in staat) toegevoegd, of je include zonder 't te merken een andere bert.h, wat het probleem wel weer zou verklaren.


EDIT: Ik had niet goed gekeken. Je moet bert.h natuurlijk wel in je header-file includen, als je de definities uit bert.h (en impliciet stdio.h) ook in je header-file wilt gebruiken.

In z'n algemeenheid gelden de overige punten wel natuurlijk. ;)

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Topicstarter
Op dinsdag 21 mei 2002 11:57 schreef Soultaker het volgende:
EDIT: Ik had niet goed gekeken. Je moet bert.h natuurlijk wel in je header-file includen, als je de definities uit bert.h (en impliciet stdio.h) ook in je header-file wilt gebruiken.
[/edit]
Uhm... okee, en dan in bert.h en pruts.h zeker #ifndef en #define... Hmm kan idd wel werken. Thanks.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op dinsdag 21 mei 2002 11:42 schreef DolleDries het volgende:
klopt stdio header moet je ook opnemen in je pruts header :)
de headers werken in het bestand waar ze staan. dus in headers in je cpp hebben geen invloed op headers in je header. Als je begrijpt wat ik bedoel :?
Dat is niet waar. Een geinclude header heeft geen lifetime. Je include ze, en ze gelden tot het eind van je sourcefile die je op dat moment aan het compilen bent

als je dus header1.h include vanuit source.cpp, die vervolgens weer header2.h include, dan zijn de definities uit header2.h ook 'zichtbaar' in source.cpp

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Topicstarter
Op dinsdag 21 mei 2002 12:47 schreef .oisyn het volgende:
Dat is niet waar. Een geinclude header heeft geen lifetime. Je include ze, en ze gelden tot het eind van je sourcefile die je op dat moment aan het compilen bent

als je dus header1.h include vanuit source.cpp, die vervolgens weer header2.h include, dan zijn de definities uit header2.h ook 'zichtbaar' in source.cpp
Tja, dat dacht ik eigenlijk ook wel. Maar waarom wil VC dan nie? De bestanden worden wel geinclude, al had ik daar eerst wel problemen mee, maar die foutmeldingen zijn nu weg. De meeste foutmeldingen zitten in de geinclude include headers.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
Vanwege die #define en #ifndef kan het toch geen kwaad om een header 2 x te laden? Dan zou ik gewoon de header nog een keer inladen in de desbetreffende source, dan ben je waarschijnlijk van het probleem af. Misschien ontdektie dan dattie al geladen is, misschien realiseerde hij het zich gewoon niet (figuurlijk gesproken).

edit:

Heb je die error gewoon ge-copy-pasted?
Want er staat File *blahblah:
Staat er misschien een dubbele punt in plaats van een punt-komma ( -> ; ).
Kweet niet zeker :?

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

tja... koppiepeest je VOLLEDIGE headers eens? Misschien ergens een typefout die je over het hoofd gebt gezien (#ifdef ipv #ifndef ofzo)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • The End
  • Registratie: Maart 2000
  • Laatst online: 07:14

The End

!Beginning

staat er in pruts.h wel #include "bert.h" ?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

hoeft toch niet, pruts.h wordt geinclude vanuit bert.h

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • The End
  • Registratie: Maart 2000
  • Laatst online: 07:14

The End

!Beginning

Op dinsdag 21 mei 2002 15:00 schreef .oisyn het volgende:
hoeft toch niet, pruts.h wordt geinclude vanuit bert.h
Ja, maar in de header pruts.h wordt FILE gebruikt en die staat in stdio.h . Dus moet stdio.h geinclude worden in pruts.h (of dus bert.h)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

en stdio wordt weer geinclude in bert.h :)
Op dinsdag 21 mei 2002 11:38 schreef Xenophage het volgende:

bert.h (hoofd-include)
code:
1
2
3
4
#include <stdio.h>

#include "include/predefs.h"
#include "include/pruts.h" // class CPruts

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • The End
  • Registratie: Maart 2000
  • Laatst online: 07:14

The End

!Beginning

Op dinsdag 21 mei 2002 15:04 schreef .oisyn het volgende:
en stdio wordt weer geinclude in bert.h :)
[..]
Dit wordt leuk :)
pruts.h wordt wel geinclude, maar bij het doorlopen van pruts.h wordt stdio.h niet gevonden, want die is niet geinclude bij deze file.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

kijk:
code:
1
2
3
4
5
6
7
8
9
10
source.cpp
-> #include "bert.h"
   -> #include <stdio.h>
    end
   -> #include "predefs.h"
    end
   -> #include "pruts.h
    end
   end
end

dus als de compiler in pruts.h is, dan weet hij de definities van stdio.h al :) (mits hij geinclude is vanuit bert.h, maar dat is ie volgens Xenophage)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • The End
  • Registratie: Maart 2000
  • Laatst online: 07:14

The End

!Beginning

Op dinsdag 21 mei 2002 15:10 schreef .oisyn het volgende:
kijk:
code:
1
2
3
4
5
6
7
8
9
10
source.cpp
-> #include "bert.h"
   -> #include <stdio.h>
    end
   -> #include "predefs.h"
    end
   -> #include "pruts.h
    end
   end
end

dus als de compiler in pruts.h is, dan weet hij de definities van stdio.h al :) (mits hij geinclude is vanuit bert.h, maar dat is ie volgens Xenophage)
Ja, je hebt gelijk :) Ik werd er chagerijnig van dus ik heb het getest:
Als je #include <bert.h> doet, dan werkt het niet.
Als je #include "bert.h" doet, dan werkt het! :)

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Topicstarter
Op dinsdag 21 mei 2002 15:14 schreef The End het volgende:

[..]

Ja, je hebt gelijk :) Ik werd er chagerijnig van dus ik heb het getest:
Als je #include <bert.h> doet, dan werkt het niet.
Als je #include "bert.h" doet, dan werkt het! :)
Okee dan. Maar als ik het nou zo doe:

bert.h:
code:
1
2
3
4
5
6
7
8
9
#ifndef __INCLUDED_BERT_H
#define __INCLUDED_BERT_H

#include <stdio.h>

#include "predefs.h"
#include "pruts.h"

#endif // !__INCLUDED_BERT_H

predefs.h:
code:
1
2
3
#include <bert.h>

// ...

pruts.h:
code:
1
2
3
#include <bert.h>

// ...

Dat moet dan toch ook werken?

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • The End
  • Registratie: Maart 2000
  • Laatst online: 07:14

The End

!Beginning

Op woensdag 22 mei 2002 11:08 schreef Xenophage het volgende:

[..]
Dat moet dan toch ook werken?
Yep. Zo doet ie het zeker.
Pagina: 1