Foros del Web » Programación para mayores de 30 ;) » Programación General »

Nunca puedo compilar mas de un archivo por este error!!!

Estas en el tema de Nunca puedo compilar mas de un archivo por este error!!! en el foro de Programación General en Foros del Web. Hola, estoy haciendo un proyecto grande y pues necesito usar varios modulos y archivos de encabezado, en pocas palabras varios archivos de codigo. Pero esto ...
  #1 (permalink)  
Antiguo 05/02/2004, 15:24
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Nunca puedo compilar mas de un archivo por este error!!!

Hola, estoy haciendo un proyecto grande y pues necesito usar varios modulos y archivos de encabezado, en pocas palabras varios archivos de codigo.

Pero esto no es la primera vez que pasa.

Lo que sucede es que siempre, SIEMPRE que quiero compilar mas de 2 archivos me marca un error fuera de mi alcanze.

Este es el error que me sucedio esta vez.


-----------------------------------------

--Configuration: Game - Win32 Debug--------------------
Compiling...
ddengine.cpp
d:\dospro\proyectos\game\ddengine.h(1) : warning C4182: #include nesting level is 363 deep; possible infinite recursion
d:\dospro\proyectos\game\ddengine.h(1) : fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit
main.cpp
d:\dospro\proyectos\game\ddengine.cpp(1) : warning C4182: #include nesting level is 362 deep; possible infinite recursion
d:\dospro\proyectos\game\ddengine.cpp(1) : fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit
Error executing cl.exe.

Game.exe - 2 error(s), 2 warning(s)


----

Ya intente de todo y no se que es lo que esta mal en el codigo ...

Espero que alguien me ayude.


Saludos
  #2 (permalink)  
Antiguo 06/02/2004, 07:17
 
Fecha de Ingreso: diciembre-2003
Mensajes: 34
Antigüedad: 20 años, 4 meses
Puntos: 0
Hola:

Prueba a revisar todos los includes, no vaya a ser que algún archivo incluya a otro que a su vez lo iesté ncluyendo a él. Puede que ya lo hayas hecho, pero es lo primero que se me ha venido a la cabeza al leer tu mensaje.

Espero que te sirva de ayuda.

Saludos
  #3 (permalink)  
Antiguo 06/02/2004, 09:22
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Justamente en eso habia pensado.

Tengo un archivo .h que tiene varias declaracionesy los prototipos de las funciones definidas en el archivo .cpp

En cpp necesito incluir el .h porque ahi estan las declaraciones.
En el .h necesito incluir el .cpp porque ahi estan las funciones para hacer los prototipos.

Que puedo hacer????!!!!!

En el .h puse un #ifndef _XXXX_XX_H #define _XXXX_XX_H
Sera necesario poner algo asi en el cpp???

Espero mas ayuda gracias.

Saludos
  #4 (permalink)  
Antiguo 06/02/2004, 09:30
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,
Cita:
En el .h necesito incluir el .cpp porque ahi estan las funciones para hacer los prototipos
Hace mucho que no programo en cpp, pero eso me "daña" los oidos.

En los .h no debes incluir ningun cpp. Si lo piensas, estarias incluyendo el .cpp en todos los .cpp donde incluyes el .h.

Y si mal no recuerdo, no es necesario la definicion de la funcion para hacer la declaracion (que es lo que tu llamas prototipo, si no me equivoco).

De todas formas, quizas te pasa porque tienes el include .cpp (me duele!!!) fuera del la armadura ifndef (sin ver el codigo, es dificil afrimarlo).

Pero mejor que quites el include .cpp del .h.

Suerte.

PD: Quizas no te he entendido bien.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 06/02/2004, 09:54
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Ya resolvi el problema.

Mejor puse las declaraciones de datos en el cpp y en el h inclui el cpp y el h lo inclui en el archivo main.cpp.

Pero ahora estoy intentando primero compilar el archivo .cpp y despues enlazar todos juntos.

Saludos
  #6 (permalink)  
Antiguo 06/02/2004, 09:58
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Bueno, ya arregle las cosas, pero ahora sale este error y no se que significa.

error C2143: syntax error : missing ';' before 'PCH creation point'


Saludos
  #7 (permalink)  
Antiguo 06/02/2004, 10:18
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
MMMMMM..........Otra vez........................................

Lo que sucede es que ahora ya esta todo bien.

En el .h no inclui el cpp.

Pero en el cpp si inclui el .h

En el mian tambien inclui el .h

Pero recuerden que puse el #ifndef.........

Y me sale un error que creo reconocer pero no se como quitarlo.




-Configuration: Game - Win32 Debug--------------------
Compiling...
ddengine.cpp
Linking...
main.obj : error LNK2005: "struct IDirectDrawSurface * front" (?front@@3PAUIDirectDrawSurface@@A) already defined in ddengine.obj
main.obj : error LNK2005: "struct _DDSCAPS ddscaps" (?ddscaps@@3U_DDSCAPS@@A) already defined in ddengine.obj
main.obj : error LNK2005: "struct _DDSURFACEDESC * ddsd" (?ddsd@@3PAU_DDSURFACEDESC@@A) already defined in ddengine.obj
main.obj : error LNK2005: "struct IDirectDrawSurface * back" (?back@@3PAUIDirectDrawSurface@@A) already defined in ddengine.obj
main.obj : error LNK2005: "struct IDirectDraw * ipdd" (?ipdd@@3PAUIDirectDraw@@A) already defined in ddengine.obj
Debug/Game.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

Game.exe - 6 error(s), 0 warning(s)
-------------------


Parece ser como si la definicion de lso h en el main y en el cpp afectara.

Pero porque? si yo puse la directiva...........

Ya vieron porque nunca puedo compilar mas de un archivo???

Siempre es lo mismo con esto.
  #8 (permalink)  
Antiguo 06/02/2004, 13:45
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Asunto arreglado.

Gracias por su ayuda.

Lo unico que me faltaba era poner unos statics en los prototipos

Salduos
  #9 (permalink)  
Antiguo 06/02/2004, 13:50
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Creo que me he perdido.

Creo que el problema es que quieres tener unas variables que sean accesibles desde main y desde el otro cpp, y que las has metido en el .h. Y ese .h lo has incluido en los 2 cpp. Asi cada cpp compilado (cada obj) tiene su propia variable, una cada uno, llamadas igual. Y es a la hora de juntarlos los obj en el linkador, que se encuantra con 2 varaibles distinas con el mismo nombre.

Esto seria la explicacion "teorica" (si es que no se me ha olvidado el C/C++).

Creo recordar que esto se solucionaba con la palabrabra extern el la declaracion de la variable en el .h y definiendo en uno solo de los cpp.

En el .h
Código:
extern int variable;
en el cpp:
Código:
include .h

int variable;

variable=30;
en el main:
Código:
include .h

printf(variable);
Seria algo asi la logica.

Pero con esto estarias usando variables globales, que son el demonio (solo superadas por el GOTO). Asi que lo "correcto" seria replantearte el uso de variables globales.

Saludos.

PD: El extern creo que es de C. Pero comoC++ es una evolucion de C, supongo que seguira funcionando.

PD2: Siempre que han asustado los interfaces de directx. Me sentia mas comodo con OpenGL y su forma de hacer en C. De esto hace 3 o 4 años.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 06/02/2004, 14:21
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
¿static? Puede ser. Creo que en C++ tenia mas funciones que en C.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 07:59.