[C++] Wzajemne includowanie


(Kamiljano) #1

Problem męczy mnie już od jakiegoś czasu...

Mam dwie klasy, każda z nich posiada swój własny plik nagłówkowy i plik źródłowy. Problem polega na tym, że jeżeli plik nagłówkowy klasy A includuje plik nagłówkowy klasy B, to w pliku nagłówkowym klasy B nie mogę includować klasy A o_O a bywa, że jest to potrzebne np. kiedy tworzę jakieś własne widgety i dziecko powinno znać swojego rodzica...

W przybliżeniu wygląda to tak:

Plik A.h:

#ifndef A_H

#define A_H

#include "B.h"

class A

{

B* b;

};


#endif

Plik B.h:

#ifndef B_H

#define B_H

#include "A.h"

class B

{

A* a;

};


#endif

Błąd teraz jest taki, że klasa A potrzebuje klasę B i do tego momentu działa wszystko dobrze, ale jako, że identyfikator A_H był już wcześniej zaincludowany, to klasa B już klasy A nie includuje, a jednak jej potrzebuje...


(Michalo2882) #2

Wystarczy dodać przed definicją klasy B deklarację klasy A.

#ifndef B_H

#define B_H

#include "A.h"

class A;

class B

{

A* a;

};


#endif

([alex]) #3

Trzeba się zastanowić nad tym czy słusznie dzielisz ten kod na dwa pliki *.h i dwa pliki *.cpp

Jeżeli klasy ściśle współpracują to może ma sens zrobić jeden plik *.h i jeden plik *.cpp

Rozwiązanie od michalo2882 , jest jak najbardziej słuszne i będzie potrzebne nawet jeżeli połączysz to w dwa pliki.