PDA

Prikaži potpunu verziju : [C++] Cirkularni #include


ivan90BG
6.4.2012, 1:06
Imam sledeću situaciju. Dve klase.

class A { ... new B();... } //u fajlu A.h

class B : A { ... } //u fajlu B.h

Klasa A ima potrebu da koristi svoju podklasu B za koju mora da zna. (jedna od metoda klase A ima klasu B kao povratnu vrednost pa je stoga deo potpisa metode i mora da bude u header-u) Kako može da se sredi da A zna za B. U oba fajla sam stavio standardno
#ifndef ime
#define ime
...
#endif
Samo ne znam tačno gde bi trebalo staviti #include-ove, čini mi se unutar #ifendef bloka.
Naravno kompajler izbacuje tonu grešaka kako god okrenem.

M.Silenus
6.4.2012, 9:11
// A.h
#if !defined(A_HEADER)
#define A_HEADER

class B; // forward declaration, sada možeš da koristiš pokazivače na ovaj objekat

class A
{
B* _b;
public:
A();
};

#endif

// A.cpp
#include "A.h"
#include "B.h"

A() : _b(new B()){}

// B.h
#if !defined(B_HEADER)
#define B_HEADER

#include "A.h"

class B : public A
{
public:
B();
};

#endif

// B.cpp
#include "B.h"

B(): A() {}



Koji problem pokušavaš da rešiš? Možda možeš da osmisliš necirkularno rešenje - i ovde ne mislim samo na include-ove. Tebi je dizajn hijerarhije klasa cikličan.