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

problema com template


oiacyber

Pergunta

Eu tenho este exemplo:

arquivo: template.h

template <class T>

class A{

T* dados;

int i;

};

arquivo: outro.cpp

#include "template.h"

class B{

public:

void imprimei(A<int> var);

};

Quando eu declaro uma função q tem como parametro a class A, da um erro que o A não foi declarado.

To usando o namespace, to incluindo todas as bibliotecas que preciso.

O que eu faço? O que tem de errado no codigo que ele não consegue reconhecer a class A dentro de uma outra class em outro aquivo?

Mas quando eu chamo a class A dentro de uma função ela reconhece, sem ser como parametro.

Obrigado.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

copiei seu codigo aqui igualzinho como você postou e compilou sem problemas aqui no dev c++.

de teste ate tentei isso, e ele mostrou 9 sem problemas:

#include <stdio.h>

template <class T>
class A{
public :
T* dados;
int i;
};

class B{
public:
void imprimei(A<int> var)
{
    printf("%d", *(var.dados));
}
};

int main(void)
{
    B x;
    A<int> y;
    int i = 9;
    
    y.dados = &i;
    
    x.imprimei(y);
    
    getchar();
}[/code]

qual compilador você usa??

Link para o comentário
Compartilhar em outros sites

  • 0

Estou usando o codeblocks que tem o gcc como compilador.

Aqui ele não reconhece a classe template de jeito nenhum.

Uma forma que eu vejo de resolver meu problema é fazendo uma herança por composição, mas eu não sei fazer isto com classe template :unsure:

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

tb compilou aqui no gcc. inclusive criei um arquivo template.h e adicionei como include no programa principal, e ele reconheceu sem problemas.

muito estranho, você tentou declarar um objeto da classe A dentro do programa principal e compilou??

se você declarar uma variavel qualquer dentro do template.h, você consegue acessa-la no programa principal??

talvez então seja algum erro do codeblocks.

Link para o comentário
Compartilhar em outros sites

  • 0

Assim, só pra mostrar como esta a estrura do programa.

estaria assim:

Arquivo template.h

#ifndef A_H_
#define A_H_

template <class T>
class A{
public :
T* dados;
int i;
};

#endif
------------------------------------------------------------------------------ Arquivo b.h
#ifndef B_H_
#define B_H_

#include "template.h"

class B{
public:
void imprimei(A<int> var);
};

#endif
---------------------------------------------------- Arquivo b.cpp
#include <iostream>
#include "template.h"
#include "b.cpp"
using namespace std;

void B::imprimei(A<int> var){
  cout << *(var.dados) << endl;
}

A estrutura que estou fazendo é esta, mas mesmo eu fazendo um void teste(void){A<int> var;}; na class B ele não reconhece a classe A.

Editado por Durub
Adicionar tags code [Durub]
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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...