Avatar billede Slettet bruger
10. december 2002 - 18:45 Der er 9 kommentarer og
1 løsning

Dbl.rettet associering

Jeg skal implementere en dobbelt-rettet associering i cpp (Klasse1 peger på Klasse2 og omvendt). For at jeg kan have private variable der peger mod de to klasser, skal jeg #include header filen til den anden klasse, men på compile-time giver dette en uendelig løkke... Hvad gør man så?
Avatar billede soreno Praktikant
10. december 2002 - 18:57 #1
#ifndef UNIK_DEFINITION_FEKS_KLASSEA
#define UNIK_DEFINITION_FEKS_KLASSEA
indhold af klasse1
#endif
Avatar billede soreno Praktikant
10. december 2002 - 18:59 #2
altså:
#ifndef UNIK_DEFINITION_FEKS_KLASSEB
#define UNIK_DEFINITION_FEKS_KLASSEB

#include <iostream>

class KlasseB
{
  public:

  private:

};

#endif
Avatar billede Slettet bruger
10. december 2002 - 19:07 #3
Foreløbig tak - skal lige testes. :o)
Avatar billede Slettet bruger
11. december 2002 - 21:52 #4
Tjah - problemer er der stadig... Noget du evt. har glemt at fortælle?
Avatar billede soreno Praktikant
12. december 2002 - 15:12 #5
Hmmm, jeg har kigget lidt på problemet og det er lidt mere omfattende end som så at løse. Se evt.
http://users.utu.fi/sisasa/oasis/cppfaq/ctors.html#[10.9]
Avatar billede Slettet bruger
12. december 2002 - 15:31 #6
Tak for hjælpen - jeg prøver mig frem herfra, og poster hvis (når?) jeg finder ud af det.
Avatar billede Slettet bruger
12. december 2002 - 18:30 #7
Iøvrigt indeholder mine klasser ikke noget statisk overhovedet, så jeg fik ikke så meget ud af dit link, soreno ... :-(
Avatar billede soreno Praktikant
12. december 2002 - 20:06 #8
Ok, så må jeg antage at det er noget lign. dette du forsøger:

-------------------------------------KlasseA.h
#ifndef KLASSE_A
#define KLASSE_A

#include "KlasseB.h"

class KlasseA
{
    public:
        KlasseA();
        ~KlasseA();
    private:
        KlasseB obj;
};

KlasseA::KlasseA() {}
KlasseA::~KlasseA() {}

#endif

-------------------------------------KlasseB.h
#ifndef KLASSE_B
#define KLASSE_B

#include "KlasseB.h"

class KlasseB
{
    public:
        KlasseB();
        ~KlasseB();
    private:
        KlasseA obj;     
};

KlasseB::KlasseB() {}
KlasseB::~KlasseB() {}

#endif

-------------------------------------main.cpp
#include "KlasseA.h"
#include "KlasseB.h"

int main(int argc, char **argv)
{
    KlasseA klasseA;
    KlasseB klasseB;
   
    return 0;
}

Problemet opstår fordi compileren ikke kan finde udaf hvem der kommer først - er det hønen eller ægget ?

Hvad er årsagen til at du vil bruge en dobbelt association - kan du ikke lave om på designet ?
Avatar billede Slettet bruger
13. december 2002 - 00:01 #9
Undskyld, jeg burde nok selv have kommet med dét kode-eksempel, men det er netop i dén stil jeg ønsker implementationen. Jeg gør mig nogle alternative design-overvejelser, men det er ikke helt let. Jeg venter også på svar fra anden side, så jeg venter lige med de radikale re-design :o) Tak for din tid, soreno - det er rart når folk gider hjælpe!
Avatar billede Slettet bruger
15. december 2002 - 12:10 #10
Efter svar fra min vejleder, følger hermed min løsning..... Læg mærke til der er brugt pointer (*) til associering til den anden klasse - og at der i hver klasse er tilføjet en erklæring af den anden...

-------------------------------------KlasseA.h
#ifndef KLASSE_A
#define KLASSE_A

#include "KlasseB.h"

class KlasseB;
class KlasseA
{
    public:
        KlasseA();
        ~KlasseA();
    private:
        KlasseB *obj;
};

KlasseA::KlasseA() {}
KlasseA::~KlasseA() {}

#endif

-------------------------------------KlasseB.h
#ifndef KLASSE_B
#define KLASSE_B

#include "KlasseB.h"

class KlasseA;
class KlasseB
{
    public:
        KlasseB();
        ~KlasseB();
    private:
        KlasseA *obj;   
};

KlasseB::KlasseB() {}
KlasseB::~KlasseB() {}

#endif
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester