oiacyber Postado Maio 8, 2010 Denunciar Share Postado Maio 8, 2010 Eu tenho este exemplo:arquivo: template.htemplate <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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Maio 8, 2010 Denunciar Share Postado Maio 8, 2010 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?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 oiacyber Postado Maio 8, 2010 Autor Denunciar Share Postado Maio 8, 2010 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Maio 8, 2010 Denunciar Share Postado Maio 8, 2010 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 oiacyber Postado Maio 9, 2010 Autor Denunciar Share Postado Maio 9, 2010 (editado) 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 Maio 9, 2010 por Durub Adicionar tags code [Durub] Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Maio 9, 2010 Denunciar Share Postado Maio 9, 2010 Arquivo b.cpp#include <iostream>#include "template.h"#include "b.cpp"using namespace std;você esta mesmo incluindo o b.cpp dentro dele mesmo??não seria o b.h?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 oiacyber Postado Maio 9, 2010 Autor Denunciar Share Postado Maio 9, 2010 não, foi mal, é b.h Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Maio 11, 2010 Denunciar Share Postado Maio 11, 2010 tb compilou sem problemas aqui no dev c++ e no gcc.se, no b.cpp, você declarar um objeto da classe A, ele aceita?? tipo assim:A<int> a;esse codigo compila?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 oiacyber Postado Maio 11, 2010 Autor Denunciar Share Postado Maio 11, 2010 não compila de jeito nehum, nem passando por parametro, nem declarando na classe.Mas eu descobri que o problema estava no codeblocks mesmo. Eu compilei no gcc do linux, manualmente e rodou tranquilamente.Muito obrigado pela ajuda Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
oiacyber
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
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.