Ir para conteúdo
Fórum Script Brasil
  • 0

Dividir arquivo .h


kuroi

Pergunta

é o seguinte, tenho varios arquivos .h q estou criando, cada um com classes sobre determinada coisa.

o q acontece é q agora tenho classes q dependem uma da outra em arquivos separados.

exemplo, tenho o arquivo x.h com algumas classes e o arquivo y.h com outras classes.

o arquivo x.h precisara de uma das classes contidas no arquivo y.h. daria tudo certo se eu fizesse só um include do y.h no x.h, certo??

ta, mas ai o q acontece é q uma das classes do arquivo y.h tb utiliza uma outra classe contida em x.h. e eu como o x.h já tem um include do y.h, eu não posso por um include do x.h no y.h, senao ele nem compila o programa principal quando eu referenciar, já q ele encontrara varias vezes sendo definidas as classes de cada arquivo.

ai eu teria q juntar o arquivo x.h e y.h em um só, mas não quero fazer isso, porque na verdade são mtos arquivos e esse tipo de coisa vai acontecer toda hora e ai eu teria q juntar os meus mais de 20 includes q serao cada um extremamente gdes no futuro em um unico arquivo, o q ficaria muito complicado de mexer. quero deixar tudo organizado separado por sessao em cada arquivo.

tem como eu usar a biblioteca toda como se fosse uma unica coisa, mas separada em varios arquivos?? exemplo, o arquivo x.h enxergar o y.h e vice-versa, e quando eu for usar no programa principal, eu simplesmente ponho um include q enxergue os dois ou coisa parecida. é possivel??

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

valeu durub, mas agora apareceu outra duvida. o q acontece é o seguinte, imagine q o x.h referencie o y.h e vice-versa sendo q um usa funcoes do outro e no programa principal .cpp eu referencie o y.h.

na hora de compilar, o compilador comecara a ler primeiro o y.h e passa pelo #ifndef. ai ele le a linha no y.h q tem o include do x.h, e então ele lera o x.h, e ignora a linha do include do y.h. ou seja, ele ainda não conhece as classes do y.h. mas o x.h usa essas classes, por isso ele da erro.

pra entender melhor, imagine o seguinte:

class x
{
   /* codigo */
};

class y
{
    void metodo()
    {
        x var = x(); //declara um objeto da classe x
    }
};[/code] isso funciona normal, certo?? agora imagina q eu inverta a ordem das classes, assim:
[code]class y
{
    void metodo()
    {
        x var = x(); //declara um objeto da classe x
    }
};

class x
{
   /* codigo */
};

ele vai dar erro, pois ele tenta usar a classe x antes de ela ser declarada. tem como resolver isso?? acho q já ouvi dizer q da pra resolver, mas não sei exatamente como. e isso resolvera em headers separados??

Link para o comentário
Compartilhar em outros sites

  • 0
valeu durub, mas agora apareceu outra duvida. o q acontece é o seguinte, imagine q o x.h referencie o y.h e vice-versa sendo q um usa funcoes do outro e no programa principal .cpp eu referencie o y.h.

na hora de compilar, o compilador comecara a ler primeiro o y.h e passa pelo #ifndef. ai ele le a linha no y.h q tem o include do x.h, e então ele lera o x.h, e ignora a linha do include do y.h. ou seja, ele ainda não conhece as classes do y.h. mas o x.h usa essas classes, por isso ele da erro.

pra entender melhor, imagine o seguinte:

class x
{
   /* codigo */
};

class y 
{
    void metodo()
    {
        x var = x(); //declara um objeto da classe x
    }
};
isso funciona normal, certo?? agora imagina q eu inverta a ordem das classes, assim:
class y 
{
    void metodo()
    {
        x var = x(); //declara um objeto da classe x
    }
};

class x
{
   /* codigo */
};
ele vai dar erro, pois ele tenta usar a classe x antes de ela ser declarada. tem como resolver isso?? acho q já ouvi dizer q da pra resolver, mas não sei exatamente como. e isso resolvera em headers separados??
O segundo caso não funciona, apenas o primeiro. Me permite dar uma sugestão?? Além do uso do #ifdef em cada arquivo, sugerido anteriormente pelo amigo, separe um arquivo por classe. Fica muito mais limpo, organizado, e fácil de distribuir. Se você quiser usar assim mesmo, muitos projetos que trabalham dessa maneira(muitas classes no mesmo header) declaram todas as classes previamente desta maneira:
class x;
class y;
clas blablabla;
...
class x {
  ...
  };
class y {
   ...
  };
class blablabla {
   ...
  };

Mas eu no teu lugar faria o mais organizado: um header por classe. x.h tem a declaração completa de x, y.h tem a declaração completa de y. y.h inclue x.h por dependência de classes.

Aí, utilizando o ifdef(SEMPRE faça isso para qualquer header, se não quiser ter problemas em tempo de compilação com freqüência), você garante que cada classe terá suas dependências supridas devidamente, além de organizar e distribuir melhor as coisas.

Abraços!!

[]'s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...