Compilar varios archivos en c++

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

Compilar varios archivos en c++

Notapor El_Guille » Sab Jun 11, 2011 7:23 pm

Hola a todos, tengo un problema bastante grande en c++
estoy haciendo un juego que estaba haciendo para java a c++, y como saben un juego necesita usar muchos archivos (de hecho estoy usando alrededor de 23) y uso el comando #include para incluir los archivos para usarlos en otro archivo, por ejemplo:

archivo main.cpp
Código: Seleccionar todo
#include "LoadStage.cpp", "character.cpp",

Aqui tengo un archivo que jala las clases de los archivos loadstage.cpp y character.cpp para usarlos
pero, cuando intento poner un tercer archivo como esto
Código: Seleccionar todo
#include "LoadStage.cpp", "character.cpp","pixel.cpp"

No pasa nada, pero si intento instanciar un objeto del archivo "pixel.cpp" me marca error diciendo que no lo encuentra y despues de experimentar vi que era por que no aceptaba el archivo "pixel.cpp"
¿Alguien sabe como puedo incluir muchos archivos con el #include? Se lo agradeceria mucho
Saludos
PD: si algunos no entendieron , publicare el codigo del proyecto para entrar mas a detalle
El_Guille
 
Mensajes: 6
Registrado: Vie Abr 01, 2011 9:52 pm

Re: Compilar varios archivos en c++

Notapor Juanxo » Dom Jun 12, 2011 1:47 pm

buenas,

lo primero es que no se deben incluir los .cpp, puesto que esto te llevaría a errores por redefinición de variables y movidas. Incluye los .h
En cuanto a lo de varios archivos en un include, tienes que poner un include por cada archivo
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Compilar varios archivos en c++

Notapor El_Guille » Dom Jun 12, 2011 7:34 pm

Hola, mira aqui tengo un codigo de mi proyecto

LoadStage.cpp
Código: Seleccionar todo
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>

class clase{
   SDL_Surface *screen;
   public :SDL_Surface *esc;
   public: SDL_Surface *map;
   public: SDL_Surface *window;   
   int scrollx;
   int scrolly;
   int camerawidth; 
   int cameraheight;
    public: Uint32 pared;
   
public :clase(){
   scrollx=0;
   scrolly=0;
    screen = SDL_SetVideoMode(500, 500, 16, SDL_HWSURFACE);   
    camerawidth=320;
    cameraheight=240;
   esc = IMG_Load("escenario2.png");
   window = IMG_Load("escenario2.png");
   map = IMG_Load("escenario2.png");
    pared=SDL_MapRGB(esc->format, 0x00, 0x00, 0xff);
}     

public :void scrollMove(int x,int y,int movex,int movey){
if(x-(camerawidth/2)>0&&((x)+(camerawidth/2))<map->w)scrollx+=movex;
else{
     if((x+camerawidth/2)>map->w) scrollx=map->w-camerawidth;
    if((x-camerawidth/2)<0) scrollx=0;
}
if(y-(cameraheight/2)>0&&((y)+(cameraheight/2))<map->h)scrolly+=movey;
else{
     if((y+cameraheight/2)>map->h) scrolly=map->h-cameraheight;
    if((y-cameraheight/2)<0) scrolly=0;
}
}

public :void setScroll(int x,int y){
    scrollx=x-(camerawidth/2);
   scrolly=y-(cameraheight/2);
   if(scrollx<0)scrollx=0;
   if(scrollx+camerawidth>map->w)scrollx=map->w-camerawidth;
   if(scrolly<0)scrolly=0;
   if(scrolly+cameraheight>map->h)scrolly=map->h-cameraheight;
}
       
public: void limpiar (int x,int y,int ancho,int alto){
    SDL_Rect rect = {x, y, 0, 0};
   SDL_Rect rect2 = {x, y, ancho,alto};
   SDL_BlitSurface(esc,&rect2, map, &rect);
}

public: void imprimir(SDL_Surface *ima,int x,int y,int ancho,int alto){
     SDL_Rect rect = {x, y, 0, 0};
     SDL_Rect rect2 = {0, 0, ancho,alto };
     SDL_Rect rect3= {scrollx, scrolly, screen->w, screen->h};
      SDL_BlitSurface(ima,&rect2, map, &rect);
      SDL_BlitSurface(map,&rect3, window,NULL);   
}     

public: void repaintMapGame(){
     Uint32 a = SDL_MapRGB(screen->format, 255, 255, 255);
     SDL_FillRect(screen, NULL, a);
     SDL_Rect rect = {0, 0, camerawidth, cameraheight};
     SDL_BlitSurface(window,&rect, screen,&rect);   
     SDL_Flip(screen);
}       

};



Ya intente hacer el .h pero no me quiere jalar a la hora de hacer el include
¿como es que debo hacer el .h de este archivo o que elementos debo añadir?
Saludos
El_Guille
 
Mensajes: 6
Registrado: Vie Abr 01, 2011 9:52 pm

Re: Compilar varios archivos en c++

Notapor Juanxo » Dom Jun 12, 2011 9:53 pm

la manera habitual de incluir un archivo es:

#include "archvo.h"

esto busca un archivo en la carpeta del fichero que estás escribiendo (main.cpp en el ejemplo) que se llame archivo.h y te lo incluye

Otra cosa es que los archivos que incluyas (y en general todos los .h) tienen que tener unas directivas para evitar que se incluyan muchas veces y dupliquen cosas:

#ifndef VARIABLE_UNICA_QUE_QUIERAS
#define VARIABLE_UNICA_QUE_QUIERAS

// Aqui va todo el código del .h

#endif


donde VARIABLE_UNICA_QUE_QUIERAS suele ser usando el nombre de archivo, que suele ser unico (Enemigo_H por ejemplo)
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Compilar varios archivos en c++

Notapor El_Guille » Lun Jun 13, 2011 3:20 am

Lo siento, explicame un poco mas despacio por favor, supongamos que tengo este archivo con este codigo
Código: Seleccionar todo
   class Clase{
      int numero;
          public :Clase(){  }
          public void metodo(){}
   };


¿Como quedaria el archivo .h?, de lo poco que he leido se que hay que definir los metodos y clases, pero no se como hay que definir los metodos dentro de una clase y si tambien las variables como int o char
Esa es la duda en la que tengo mas problemas
El_Guille
 
Mensajes: 6
Registrado: Vie Abr 01, 2011 9:52 pm

Re: Compilar varios archivos en c++

Notapor Juanxo » Lun Jun 13, 2011 7:42 am

creo que lo más recomendable es que te cojas un libro de C++, pero intentaré resolver las dudas:

con el ejemplo que me has pasado sería:

#ifndef Clase_H
#define Clase_H

class Clase{
public:
Clase();

int metodoX();

private:

int atributo;
};

#endif


como ves, aquí no se pone el modificador de acceso delante de cada atributo o método, si no que se pone por secciones
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Compilar varios archivos en c++

Notapor El_Guille » Lun Jun 13, 2011 7:02 pm

Ya hice lo que me dijiste, mas o menos como he entendido a la hora de hacer el .cpp debo de incluir el .h ¿cierto? quedando mas o menos algo como esto
Código: Seleccionar todo
#include "clase.h"
class Clase{
      int numero;
          public :Clase(){  }
          public void metodo(){}
   };


Y eso me llega la otra duda que tenia en un principio ¿como uso o para que uso las directivas que habiamos definido en el .h? ya que si pongo el codigo por si mismo me tira error diciendo que ya estaban definidos previamente esos objetos en el .h
Espero que no te este quitando la paciencia pero esta es la unica manera en la que puedo solucionar esta incognita
El_Guille
 
Mensajes: 6
Registrado: Vie Abr 01, 2011 9:52 pm

Re: Compilar varios archivos en c++

Notapor shackra » Sab Jul 30, 2011 9:49 pm

Juanxo escribió:creo que lo más recomendable es que te cojas un libro de C++


servido mi compa http://arco.inf-cr.uclm.es/~dvilla/pens ... p-vol1.pdf ;D

que lo disfrute!
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado