Gå til innhold

C++ header cyclic dependencies


Anbefalte innlegg

Hei,

 

Hvordan løser man problemet med syklisk header-avhengighet? La oss ta eksempelet under:

 

A.hpp:

#ifndef _A_HPP_
#define _A_HPP_

#include "B.hpp"

class A
{
public:
A()
{
}

void DoSomethingWithA()
{
	std::cout << "Hello, World! This is A." << std::endl;
}

void SomethingElse(B* b)
{
	b->DoNothing();
}
};

#endif // _A_HPP_

 

B.hpp:

#ifndef _B_HPP_
#define _B_HPP_

#include "A.hpp"

class B
{
public:
A* a;

B()
{
	a = new A();
	a->DoSomethingWithA();
	delete a;
}

void DoSomethingWithB()
{
	std::cout << "Hello, World! This is B." << std::endl;
}

void DoNothing()
{
}
};

#endif // _B_HPP_

 

La oss si at vi inkluderer A.hpp for programmet vårt og kompilerer:

#include "A.hpp"

int main()
{
A* a = new A();
a->DoSomethingWithA();
delete a;
return 0;
}

 

Hva skjer? Jo, class B vet ikke om class A enda når kompilatoren kommer til definisjonen av class B. Jeg vil jo at headerne skal funke "hver for seg" når de blir inkludert alene og sammen med headere. Og da må jeg inkludere de headerne som trengs for at klassene i denne headeren skal funke.

 

Hvordan får jeg dette til å funke?

Endret av LostOblivion
Lenke til kommentar
Videoannonse
Annonse
  • 3 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...