Zapętlone includowanie się plików

0

Witajcie

Po takim czasie w CPP dopiero teraz potknąłem się na tym i nie wiem co zrobić. :D
Mam coś takiego:

 
/* resource.hpp */

#ifndef RES
#define RES

#include "manager.hpp"

class res{
friend class manager;
/* Przyjmijmy, że coś w tej klasie jest */
};

#endif

/* manager.hpp */

#ifndef RES_MAN
#define RES_MAN

#include "resource.hpp"

class manager{
/* Przyjmujmy że tutaj tworzyony jest std::vector<res*> wskazniki; 
dlatego musimy zaincludowac resource.hpp, ale beda bledy "res was not declared in this scope" itp.*/
};

#endif

/* WIĘC: Panie phemiesze jak żyć? */

Nie mam pojęcia jak to rozwiązać. Podobny problem był jak chciałem zrobić w innym pliku typedef do Resource.

1

a po co w resource.hpp jest includowany manager.hpp?

2

forward declaration

1
class res;

class manager {
   ...
};
2

W tym wypadku owieczka nie powinna znać pasterza.

0

zmien nazwe defina w kazdym z plikow np. na inna:

#ifndef _MANAGER_HPP_
#define _MANAGER_HPP_
...

Dodatkowo w plikach naglowkowych NIE uzywaj zadnych definicji. Tj. np. zmienne statyczne/globalne powinny byc zdefiniowane w plikach zrodlowych nie naglowkowych (w naglowkowych tylko oznajmienie ze zmienna gdzies istnieje: extern static int JestemZdefiniowanyGdziesIndziej;).

Jesli w klasie uzywasz tylko pointerow do innej klasy to nie musisz w ogole uzywac #include, mozesz po prostu napisac:

class A;
class B { A* ptr; };

Jesli w pliku A musisz includowac B a w B includowac A to masz cos zle.

0

Jak zrobiłem nad managerem class res; to teraz undeined reference to vtable for res

1

Jestes pewien ze potrzebujesz zeby byli przyjaciolmi? Friend class prawie zawsze to zly design.

1 użytkowników online, w tym zalogowanych: 0, gości: 1