Toon posts:

[c++] Not defined type

Pagina: 1
Acties:

Verwijderd

Topicstarter
Sorry voor de vage titel, maar geen idee hoe ik het probleem anders moet beschrijven.

Ik heb 2 klasses MObject en Record in de header file van MObject include ik Record.h en in de headerfile van Record include ik MObject.
Dit moet ik doen omdat ik van MObject een pointer naar Record heb en omgekeerd, bij het compilen van MObject.cxx Geeft de compiler een error over Record.h dat MObject niet gedefinieerd is.
Ligt dit aan het feit dat die headerfiles elkaar includen? Volgens mij moet het toch kunnen.

  • Helox-in-a-box
  • Registratie: Augustus 2000
  • Laatst online: 01:01
ik denk dat je eerst de MObject moet includen en dan pas de Record

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Hier zijn al eens topics over geweest, ik zou alleen ff niet weten hoe ik dat moest vinden met de search (zoektermen zijn nogal lastig). Wat iig wel werkt tegen het ongedefinieerde is
A:
C++:
1
2
3
4
5
6
7
#pragma once
class A;
#include "B.h"
class A
{
//definitie A
};

B:
C++:
1
2
3
4
5
6
7
#pragma once
class B;
#include "A.h"
class B
{
//definitie B
};

Maar dit gaat volgens mij weer mis als je methoden of attributen van de klasse nodig hebt.

[ Voor 9% gewijzigd door SWfreak op 17-11-2003 11:38 ]


Verwijderd

Topicstarter
Ik heb gezocht maar idd, had ook niet echt een geweldig idee qua zoekterm, en pragma is compiler afhankelijk, ik zit hier op een solaris (werkje voor school)

pragma is geen "goede vorm" beweren ze hier.

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Goed, dan vervang je #pragma once door zoiets:
C++:
1
2
3
4
#ifndef _HEADER_A_
#define _HEADER_A_
//rest van header
#endif

Is hetzelfde, alleen dan wat omslachtiger...
Ik had trouwens gezocht op de zoekterm [class A] (zonder vierkante haken natuurlijk :+), en daar kwamen wel wat nuttige links uit navoren. O.a. het bovenstaande...

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

SWfreak schreef op 17 november 2003 @ 11:55:
Is hetzelfde, alleen dan wat omslachtiger...
en gewoon portable

Gebruik gewoon altijd de normale headerguard (ifndef/define/endif). Je zou er evt. nog een #pragma once tussen kunnen zetten, maar dan werkt je code tenminste ook nog op een andere compiler

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.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

[rml][ C++] hash_map-error[/rml]

En zo vond ik er nog wel een stel ;)

Professionele website nodig?


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 17:14
#pragma once is niks mis mee, mits je eerst gecheckt hebt dat je een compiler gebruikt die dat nodig heeft. Dus #if defined ( MSVC && na versie 5 ) || ... #endif

GCC bijvoorbeeld doet exact hetzelfde als #prgama once, als je #ifndef HEADER_A ... #endif gebruikt. Alleen dat werkt ook op MSVC, en alle andere compilers. het token _HEADER_A is gereserveerd voor de compiler, net zoals alles wat met _[A-Z_] begint.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1