Foros del Web » Programación para mayores de 30 ;) » C/C++ »

error: forward declaration of 'class Foo' en template

Estas en el tema de error: forward declaration of 'class Foo' en template en el foro de C/C++ en Foros del Web. Buenas! Tengo el siguiente codigo: Código: #ifndef GECONTENTMANAGER_H #define GECONTENTMANAGER_H #include <string> #include <typeinfo> #include <map> #include <sstream> #include <iostream> #include "object.hpp" class Engine; class ...
  #1 (permalink)  
Antiguo 23/01/2013, 15:20
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 7 meses
Puntos: 0
error: forward declaration of 'class Foo' en template

Buenas!

Tengo el siguiente codigo:

Código:
#ifndef GECONTENTMANAGER_H
#define GECONTENTMANAGER_H

#include <string>
#include <typeinfo>
#include <map>
#include <sstream>
#include <iostream>
#include "object.hpp"

class Engine;
class PhysicPlane;

class Mesh;
class Shader;
class Texture;
class GEContentManager
{
    public:
        GEContentManager();
        Engine* eng;
        std::string rootDirectory;

        // Funcion que carga cualquier tipo de archivo a partir de una ruta y un T.
        // Funcion que carga un archivo a partir del rootDirectory + filename. Por ejemplo 'C:\\Data\' + 'cube.obj'
        template <class T> T* Load(std::string filename)
        {
            std::cout<<eng->pl<<std::endl;
            [...]
        }
Error:

error: invalid use of incomplete type 'class Engine'
error: forward declaration of 'class Engine'


Lo que intento es acceder a la variable pl, que es un objeto PhysicPlane, a traves de la variable eng, de clase Engine. El problema es que me da error si pongo eng->pl, y no tengo ni idea de porque, ya que tengo las clases declaradas arriba.
Si simplemente pongo eng, no recibo ningún error en el programa.
  #2 (permalink)  
Antiguo 26/01/2013, 08:54
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: error: forward declaration of 'class Foo' en template

Define tu método fuera de la clase y después de la declaración de Engine para que el compilador entienda como está compuesto un Engine.

Mal

Código C++:
Ver original
  1. struct A;
  2.  
  3. struct B{
  4.     A *ptr;
  5.     void load(){
  6.         ptr->g;
  7.     }
  8. };
  9.  
  10. struct A{
  11.     int g;
  12. };
  13.  
  14. int main(){
  15.     B b;
  16.     b.load();
  17.     return 0;
  18. }

Bien
Código C++:
Ver original
  1. struct A;
  2.  
  3. struct B{
  4.     A *ptr;
  5.     void load();
  6. };
  7.  
  8. struct A{
  9.     int g;
  10. };
  11.  
  12. inline void B::load(){
  13.     ptr->g;
  14. }
  15.  
  16. int main(){
  17.     B b;
  18.     b.load();
  19.     return 0;
  20. }

Etiquetas: template
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:17.