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

[SOLUCIONADO] Duda sobre #include y clases base

Estas en el tema de Duda sobre #include y clases base en el foro de C/C++ en Foros del Web. Buenas! Soy nuevo en el foro, la verdad es que hace años que no escribo en un foro pero haré lo que pueda por colaborar ...
  #1 (permalink)  
Antiguo 25/04/2014, 12:48
 
Fecha de Ingreso: abril-2014
Ubicación: Málaga, Andalucía, España
Mensajes: 7
Antigüedad: 10 años
Puntos: 2
Duda sobre #include y clases base

Buenas!

Soy nuevo en el foro, la verdad es que hace años que no escribo en un foro pero haré lo que pueda por colaborar en esta comunidad desde hoy.

Tras años sin programar nada serio en C++, ahora tengo que volver a este lenguaje y tengo un quebradero de cabeza que no consigo solucionar y tampoco entiendo por qué se da.

Tengo 3 clases, con la siguiente definición:

node.h:

Código:
#ifndef NODE_H
#define NODE_H

namespace rce
{
	namespace sg
	{
		class node
		{
		private:
			node * _parent;
			std::map<std::string, node *> _childs;
		public:
			node();
			~node();
			void addChild(std::string name, node * child);
			node * getChild(std::string name);
			void setParent(node * parent);
			virtual void traverse(){};
		};
	};
};
#endif
transform.h
Código:
#ifndef TRANSFORM_NODE_H
#define TRANSFORM_NODE_H

namespace rce
{
	namespace sg
	{
		class transform : public node
		{
		public:
			transform();
			~transform();
			void traverse();
		};
	};
};

#endif
geomnode.h
Código:
#ifndef GEOMNODE_H
#define GEOMNODE_H

namespace rce
{
	namespace sg
	{
		class geomnode : public node
		{
		public:
			geomnode();
			void traverse();
		};
	};
};

#endif
Estas tres clases se incluyen en siguiente fichero:

graph.h
Código:
#infdef GRAPH_H
#define GRAPH_H

#include "node.h"
#include "transformnode.h"
#include "geomnode.h"

...
Pues bien, a la hora de compilar, me devuelve el siguiente error:

error C2504: 'node': clase base sin definir | geomnode.h

Sin embargo, la clase transform no da ningun problema.

¿Alguien que arroje algo de luz sobre mi problema?

Un saludo,

Apu de Beaumarchais
  #2 (permalink)  
Antiguo 25/04/2014, 15:05
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda sobre #include y clases base

Hola, bienvenido al Foro.
Mirá yo soy muy novato, pero lo que observo que te faltó en el archivo geomnode.h es esto:

~geomnode();

Puede que ese sea el problema, creo que ese código es en C, utilizá las etiquetas Highlight de C así se observan mejor las sintáxis y se especifica el lenguaje.
Espero haberte ayudado!!
Nos vemos.
  #3 (permalink)  
Antiguo 25/04/2014, 16:53
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Duda sobre #include y clases base

venga vamos alla XDD
node.h
Código C++:
Ver original
  1. //node.h
  2. #ifndef NODE_H
  3. #define NODE_H
  4. #include<map>  //si vas usar map debes incluir map
  5. namespace rce {
  6.     namespace sg {
  7.         class node {
  8.             private:
  9.                 node * _parent;
  10.                 std::map<std::string, node *> _childs;
  11.             public:
  12.                 node();
  13.                 ~node();
  14.                 void addChild ( std::string name, node * child );
  15.                 node * getChild ( std::string name );
  16.                 void setParent ( node * parent );
  17.                 virtual void traverse() {};
  18.         };
  19.     };
  20. };
  21. #endif

transform.h
Código C++:
Ver original
  1. //transform.h
  2. #ifndef TRANSFORM_NODE_H
  3. #define TRANSFORM_NODE_H
  4.  
  5. namespace rce {
  6.     namespace sg {
  7.         class transform : public node {
  8.             public:
  9.                 transform();
  10.                 ~transform();
  11.                 void traverse();
  12.         };
  13.     };
  14. };
  15.  
  16. #endif

geomnode.h
Código C++:
Ver original
  1. //geomnode.h
  2. #ifndef GEOMNODE_H
  3. #define GEOMNODE_H
  4.  
  5. namespace rce {
  6.     namespace sg {
  7.         class geomnode : public node {
  8.             public:
  9.                 geomnode();
  10.                 void traverse();
  11.         };
  12.     };
  13. };
  14.  
  15. #endif

graph.h
Código C++:
Ver original
  1. //graph.h
  2. #ifndef GRAPH_H
  3. #define GRAPH_H
  4.  
  5. #include "node.h"
  6. #include "transform.h" //El archibo estaba mal nombrado segun los nombres que diste
  7. #include "geomnode.h"
  8. //...
  9. #endif //GRAPH_H

main.cpp
Código C++:
Ver original
  1. //main.cpp
  2. #include <iostream>
  3. #include <windows.h>
  4. using namespace std;
  5. #include "graph.h"
  6.  
  7. int main () {
  8.     system ( "MODE CON cols=100 lines=50" );
  9.    
  10.    
  11.     cin.ignore();
  12.     return 0;
  13. }
  #4 (permalink)  
Antiguo 25/04/2014, 16:57
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Duda sobre #include y clases base

Tal vez te falta #incluir la definicion de map y string
Aparece #include <map>
y #include <string>
antes de la primera vez que se usan?
__________________
Visita mi perfil en LinkedIn
  #5 (permalink)  
Antiguo 25/04/2014, 17:00
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Duda sobre #include y clases base

calgary ojo de lince ^_^
tal como lo deje en codeblocks compilo bien.
No le puse en ningún proyecto ni na solo mantener todo junto y te ira bien.
El map y un nombre de archivo me marcaban error pero no se si en su ordenador están bien nombrados. Fiar bien de los nombres de archivo.

#include "transformnode.h"

dijiste que se llama "transform.h"
  #6 (permalink)  
Antiguo 25/04/2014, 17:11
 
Fecha de Ingreso: abril-2014
Ubicación: Málaga, Andalucía, España
Mensajes: 7
Antigüedad: 10 años
Puntos: 2
Respuesta: Duda sobre #include y clases base

Bueno, ya he dado con el problema...

Al final no estaba en los ficheros .h, sino en geomnode.cpp.

Lo explico por si a alguien más le pasa. Esta es mi estructura de ficheros:

Código C++:
Ver original
  1. rcengine.h
  2.     rceconsts.h
  3.     gui.h
  4.         window.h
  5.         ...
  6.     renderer.h
  7.     graph.h
  8.         node.h
  9.         transformnode.h
  10.         geomnode.h
  11.         ...

Pues resulta que tanto en node.cpp como en transformnode.cpp tenia un

Código C++:
Ver original
  1. #include "graph.h"

pero en geomnode.cpp tenia

Código C++:
Ver original
  1. #include "node.h"

Y como la clase node ya se habia incluido antes y uso Include Guards, para geomnode.cpp no se declaraba en ninguna parte.

Fallo tonto.

Aún así, muchas gracias a todos!!
  #7 (permalink)  
Antiguo 25/04/2014, 17:21
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Duda sobre #include y clases base

bueno suerte :D
Pero lo del map no te libras ><
  #8 (permalink)  
Antiguo 25/04/2014, 17:32
 
Fecha de Ingreso: abril-2014
Ubicación: Málaga, Andalucía, España
Mensajes: 7
Antigüedad: 10 años
Puntos: 2
Respuesta: Duda sobre #include y clases base

Jeje, el include del map esta en graph.h, pero me parecio tan obvio que no lo puse en el mensaje xD
  #9 (permalink)  
Antiguo 25/04/2014, 17:34
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Duda sobre #include y clases base

Es extraña la explicacion.
Los include guards son para no definir 2 veces, pero el error es que no estaba definida la clase base.

No calza.
__________________
Visita mi perfil en LinkedIn

Etiquetas: c++, herencia
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 05:50.