Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: anonimo12121 en 23 Marzo 2011, 13:19 pm



Título: No me acuerdo de lo que hacian "." "->"
Publicado por: anonimo12121 en 23 Marzo 2011, 13:19 pm
Hola es que no me acuerdo donde lo leí lo que hacía "." y "->" se que era algo de clases y punteros. Pero no me acuerdo xDD.

Podría ser que "->" se use acceder a un miembro de una clase puntero. Y "." para acceder al miembro de una clase "normal".

Por ejemplo:

Código
  1. typedef struct {
  2.   Uint32 flags;
  3.   SDL_PixelFormat *format;
  4.   int w;
  5.   int h;
  6.   Uint16 pitch;
  7.   void *pixels;
  8.   SDL_Rect clip_rect;
  9.   int refcount;
  10. } SDL_Surface;
  11.  
  12. int w;
  13. SDL_Surface *imagen;
  14. w=imagen->w;
  15.  
  16. //en caso de ser
  17. SDL_Surface imagen;
  18. w=imagen.w;


Saludos




Edito:
Ya que estamos XD.
Me da este error `ct' undeclared (first use this function)
Código
  1.  
  2. class sprite{
  3.    private:
  4.        SDL_Surface *imagen;//imagen
  5.        SDL_Rect pos;//posicion de la imagen
  6.        SDL_Color ct;//color predeterminado verde
  7.    public:
  8.        sprite();//constructor para asginar valores a las variables
  9.        void carga_imagen(char *name);//carga una imagen con el nombre indicado
  10.        void colorkey(int r,int g,int b);//para cambiar el color transparente si uno quiere por defecto e puesto que sea el verde
  11.        void ver_sprite(SDL_Surface &scr);//para copiar la imagen a la pantalla.
  12. };
  13. sprite::sprite(){
  14.    ct.r=0;
  15.    ct.g=255;
  16.    ct.b=0;
  17. };
  18. void sprite::carga_imagen(char *name){
  19.     imagen=SDL_LoadBMP(name);
  20.     pos.w=imagen->w;
  21.     pos.h=imagen->h;
  22.     SDL_SetColorKey(imagen,SDL_SRCCOLORKEY,SDL_MapRGB(imagen->format,ct.r,ct.g,ct.b));
  23. };
  24. void colorkey(int r,int g,int b){
  25.    ct.r=r;// aqui me dice `ct' undeclared (first use this function)
  26.    ct.g=g;
  27.    ct.b=b;
  28. };
  29. void sprite::ver_sprite(SDL_Surface &scr){
  30.    SDL_BlitSurface(imagen,0,&scr,&pos);
  31. };code]
Por cierto
Código
  1. typedef struct {
  2.   Uint8 r:
  3.   Uint8 g;
  4.   Uint8 b;
  5.   Uint8 unused;
  6. } SDL_Color;
  7.  


Título: Re: No me acuerdo de lo que hacian "." "->"
Publicado por: Don Pollo en 23 Marzo 2011, 15:39 pm
Pero qué es ct?


Título: Re: No me acuerdo de lo que hacian "." "->"
Publicado por: oxydec en 23 Marzo 2011, 15:47 pm
Es exactamente es lo que dices:

"." se usa para acceder a los miembros de una clase/struct
"->" se usa para acceder a los miembros de una clase/struct a traves de un puntero

Sobre el error de ct creo que:

Código
  1. void colorkey(int r,int g,int b){
  2.    ct.r=r;// aqui me dice `ct' undeclared (first use this function)
  3.    ct.g=g;
  4.    ct.b=b;
  5. };
  6.  

deberia ser:

Código
  1. void sprite::colorkey(int r,int g,int b){ // falta decirle a que clase pertenece sino no encuentra ct
  2.    ct.r=r;// ahora ct ya esta declarado
  3.    ct.g=g;
  4.    ct.b=b;
  5. };
  6.  


Título: Re: No me acuerdo de lo que hacian "." "->"
Publicado por: Akai en 23 Marzo 2011, 15:50 pm
Tal como te han dicho ya,  el operador . se utiliza para acceder al campo de una clase / estructura. el operador -> no es más que la abreviatura de " (*puntero). ", es decir, de lo apuntado por puntero, el campo después del punto.

Y como ya te ha dicho oxydec, Si colorkey es un miembro de la clase sprite, su implementación debe llevar el nombre de la clase a la cual pertenece.

PD: contestó mientras escribía el mensaje, así que lo he adecuado un poco


Título: Re: No me acuerdo de lo que hacian "." "->"
Publicado por: oxydec en 23 Marzo 2011, 15:58 pm

PD: contestó mientras escribía el mensaje, así que lo he adecuado un poco

xD Mientras escribia tenia el presentimiento de que si no posteaba rapido la respuesta llegaria tarde.


Título: Re: No me acuerdo de lo que hacian "." "->"
Publicado por: anonimo12121 en 23 Marzo 2011, 16:31 pm
Jaja

Gracias sois los mejores XDD

sprite:: "típico  fallo de sintasix XDD"

No sé, si os pasara a veces que no encontráis un fallo tonto como este. XDD


Pero qué es ct?


Es una estructura se puede ver más abajo que lo he puesto.