Eu tenho três aulas. Cada classe tem seu próprio cabeçalho.
Gostaria que cada classe tivesse dois construtores adicionais para converter dos dois tipos restantes:
// A.h
A(const B& b){}
A(const C& c){}
// B.h
B(const A& a){}
B(const C& c){}
// C.h
C(const A& a){}
C(const B& b){}
No entanto, se eu incluir os outros dois cabeçalhos em cada cabeçalho, acabarei com uma dependência circular.
Qual é a melhor maneira de implementar isso?
Você pode usar declarações futuras para evitar referências circulares:
Ah
Bh
CH
No entanto, você não será capaz de definir seus construtores em seus
.h
arquivos, pois o compilador não saberá como realmente são os tipos declarados antecipadamente, apenas que eles existem. Você terá que definir seus construtores em seus.cpp
arquivos, onde poderá encontrar#include
as declarações completas da classe, por exemplo:A.cpp
B.cpp
C.cpp