O tambien podrias hacer una "forward declaration" del template MiTemplate
dentro de MiOtraTemplate.h asi:
#ifndef MIOTRATEMPLATE_H_
#define MIOTRATEMPLATE_H_
#include "MiTemplate.h"
// forward declaration del template MiTemplate.
template <class MiClase> class MiTemplate;
template<class MiClase> class MiOtraTemplate {
private:
MiTemplate<MiClase> atributo;
};
#endif
Lo probe sobre visual y compilo ok.. no se que onda en gcc.
Saludos,
Sebastian
pd: perdon por el top-posting. =)
Gonzalo Merayo <[EMAIL PROTECTED]> escribió: Martin,
Este tipo de cosas son las limitaciones de los Template de C++, lo podes
salvar si en lugar de atributo miembro MiOtraTemplate.atributo lo pones como
puntero.
Saludos
On 5/28/07, Martin Gorostegui <[EMAIL PROTECTED]> wrote: Hola,
Estoy obteniendo un error bajo Visual c++ 6 al intentar implementar 2
templates que se usan entre si. El error lo pude aislar en un ejemplito simple
que muestro a continuacion:
MiTemplate.h:
==========
#ifndef MITEMPLATE_H_
#define MITEMPLATE_H_
#include "MiOtraTemplate.h"
template<class MiClase> class MiTemplate {
public:
void probarUsoTemplate() {
MiClase *clase = new MiClase();
clase->mostrarMensaje();
delete clase;
}
MiOtraTemplate<MiClase>* hacerAlgoConOtraTemplate() {
return new MiOtraTemplate<MiClase>;
}
};
#endif
MiOtraTemplate.h:
==============
#ifndef MIOTRATEMPLATE_H_
#define MIOTRATEMPLATE_H_
#include "MiTemplate.h"
template<class MiClase> class MiOtraTemplate {
private:
MiTemplate<MiClase> atributo;
};
#endif
Alguien tiene idea de como puedo solucionar este tema?
El error que me reporta el Visual es el siguiente:
f:\materiasactuales\datos07\trabajospracticos\tp1\pruebatemplates\pruebatemplates\miotratemplate.h(9)
: error C2143: syntax error : missing ';' before '<'
f:\materiasactuales\datos07\trabajospracticos\tp1\pruebatemplates\pruebatemplates\miotratemplate.h(11)
: see reference to class template instantiation 'MiOtraTemplate<MiClase>'
being compiled
f:\materiasactuales\datos07\trabajospracticos\tp1\pruebatemplates\pruebatemplates\miotratemplate.h(9)
: error C2501: 'MiTemplate' : missing storage-class or type specifiers
f:\materiasactuales\datos07\trabajospracticos\tp1\pruebatemplates\pruebatemplates\miotratemplate.h(11)
: see reference to class template instantiation 'MiOtraTemplate<MiClase>'
being compiled
f:\materiasactuales\datos07\trabajospracticos\tp1\pruebatemplates\pruebatemplates\miotratemplate.h(9)
: error C2059: syntax error : '<'
f:\materiasactuales\datos07\trabajospracticos\tp1\pruebatemplates\pruebatemplates\miotratemplate.h(11)
: see reference to class template instantiation 'MiOtraTemplate<MiClase>'
being compiled
f:\materiasactuales\datos07\trabajospracticos\tp1\pruebatemplates\pruebatemplates\miotratemplate.h(9)
: error C2238: unexpected token(s) preceding ';'
f:\materiasactuales\datos07\trabajospracticos\tp1\pruebatemplates\pruebatemplates\miotratemplate.h(11)
: see reference to class template instantiation 'MiOtraTemplate<MiClase>'
being compiled
Generating Code...
Error executing cl.exe.
PruebaTemplates.exe - 4 error(s), 0 warning(s)
Gracias,
Martin
---------------------------------
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya!
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion
---------------------------------
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya! _______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion