foo.h
#include "bar.h"
class Foo {public: Bar* bar;}
Note que na classe Foo precisamos incluir a classe Bar e vice-e-versa. Porém, se tentarmos compilar esse código, obteremos um erro de compilação.
bart.h
#include "foo.h"
class Bar {public: Foo* foo;
}
O C++, porém nos dá uma ferramenta para acabar com esse problema: o uso de forward declarations. Como o próprio nome já diz, a idéia é anteciparmos a declaração de uma classe a ser usada, porém sem incluir o arquivo header propriamente dito. Vejamos:
arquivo1.h:
#include "bar.h"
class Bar; //Forward declaration da classe Bar
class Foo {public: Bar* bar;}
arquivo2.h:
#include "foo.h"
class For; //Forward declaration da classe Foo
class Bar {public: Foo* foo;
}
Isso resolve o problema das referências circulares. Agora só é dar o include dos arquivo headers dentro do arquivo .cxx, onde os métodos foram implemetados. Esse é o segredo: include só nos .cxx, dentro do .h usamos forward declaration para a declaração de classes interdependentes.
Por enquanto é só. Até a próxima!
Nenhum comentário:
Postar um comentário