elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con Cast en Visual C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con Cast en Visual C  (Leído 1,797 veces)
Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Problema con Cast en Visual C
« en: 30 Marzo 2012, 22:23 pm »

Buenas, estoy haciendo un programa con clases y me encontré con una incompatibilidad muy rara de Visual C, el siguiente código funciona perfectamente con GCC pero con Visual C me da error :S

Código
  1. class XX{
  2. public:
  3. };
  4.  
  5. class XY{
  6. public:
  7. };
  8.  
  9. typedef void (XX::*pfun)(void);
  10.  
  11. class X:public XX,XY{
  12. public:
  13. int ff(int a){
  14. return a;
  15. }
  16. static pfun f;
  17. static struct _t{
  18. pfun f;
  19. }t;
  20. };
  21.  
  22. pfun X::f=pfun(&X::ff);//??????
  23. struct X::_t X::t={pfun(&X::ff)};//??????

Citar
1>main.cpp(28): error C2440: '<function-style-cast>' : no se puede realizar la conversión de 'int (__thiscall X::* )(int)' a 'pfun'
1>          Los punteros a miembros tienen distintas representaciones; no se puede realizar la conversión entre ellos
1>main.cpp(29): error C2440: '<function-style-cast>' : no se puede realizar la conversión de 'int (__thiscall X::* )(int)' a 'pfun'
1>          Los punteros a miembros tienen distintas representaciones; no se puede realizar la conversión entre ellos

si utilizo herencia simple funciona... el tema es con la herencia múltiple:

Código
  1. class X:public XX,XY

alguno que utilice ese compilador me puede tirar un cable?

S2


En línea

david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Problema con Cast en Visual C
« Respuesta #1 en: 31 Marzo 2012, 17:57 pm »


Karman XD k raro encontrarte por ak
sólo agarré tu code y lo puse en el visual c y lo compilé así,
sólo un cambio hice, pasa que lo hice en el Visual Studio 6.
vos seguro usás el 2010, lo tengo para instalar todavia :/

Código:
class XX{
public:
};
 
class XY{
public:
};
 
//typedef void (XX::* pfun)(void);
typedef int (XX::* pfun)(int);

class X:public XX,XY{
public:
int ff(int a){
return a;
}
static pfun f;
static struct _t{
pfun f;
}t;
};
 
pfun X::f= pfun(&X::ff);
struct X::_t X::t={pfun(&X::ff)};

int main(){

//ilegal dentro de este ámbito
//pfun X::f=pfun(&X::ff);
//struct X::_t X::t={pfun(&X::ff)};


return 0;

}




En línea

Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: Problema con Cast en Visual C
« Respuesta #2 en: 4 Abril 2012, 03:13 am »

Karman XD k raro encontrarte por ak
sólo agarré tu code y lo puse en el visual c y lo compilé así,
sólo un cambio hice, pasa que lo hice en el Visual Studio 6.
vos seguro usás el 2010, lo tengo para instalar todavia :/

Código:
class XX{
public:
};
 
class XY{
public:
};
 
//typedef void (XX::* pfun)(void);
typedef int (XX::* pfun)(int);

class X:public XX,XY{
public:
int ff(int a){
return a;
}
static pfun f;
static struct _t{
pfun f;
}t;
};
 
pfun X::f= pfun(&X::ff);
struct X::_t X::t={pfun(&X::ff)};

int main(){

//ilegal dentro de este ámbito
//pfun X::f=pfun(&X::ff);
//struct X::_t X::t={pfun(&X::ff)};


return 0;

}

ya lo solucioné... al parecer en el VS 2010 hay que forzar dos casts... uno de método a clase y otro de método a método... (aunque es medio chot...)

Código
  1. class XX{
  2. public:
  3. };
  4.  
  5. class XY{
  6. public:
  7. };
  8.  
  9. typedef void (XX::*pfun)(void);
  10.  
  11. class X:public XX,XY{
  12. public:
  13. int ff(int a){
  14. return a;
  15. }
  16. static pfun f;
  17. static struct _t{
  18. pfun f;
  19. }t;
  20. };
  21.  
  22. pfun X::f=pfun((int(XX::*)(int))&X::ff);//??????
  23. struct X::_t X::t={pfun((int(XX::*)(int))&X::ff)};//??????
  24.  
  25.  
  26. int main(int argc, char* argv[]){
  27. X a;
  28. a.t.f=pfun((int(XX::*)(int))&X::ff);
  29. return 0;
  30. }

EDIT: (Otro Caso)

Código
  1. class XX;
  2.  
  3. typedef void (XX::*pfun)(void);
  4.  
  5. class XX{
  6. public:
  7. void set(pfun fun){
  8. f=fun;
  9. }
  10. pfun f;
  11. };
  12.  
  13. class XZ{
  14. };
  15.  
  16. class XW{
  17. };
  18.  
  19. class XY:public XZ,XW{
  20. };
  21.  
  22. class X:public XY{
  23. public:
  24. X(){
  25. //a.set(pfun(&X::ff));//tira el mismo error anterior
  26. a.set(pfun((void(XZ::*)(void))(&X::ff)));
  27. }
  28.  
  29. void ff(void){}
  30. static XX a;
  31. };

a ver si alguien conoce otra solución...

S2
« Última modificación: 4 Abril 2012, 20:07 pm por Karman » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
roms de drem cast
Juegos y Consolas
DANIELC01 2 2,065 Último mensaje 8 Enero 2005, 04:26 am
por STRIKE
Problema con Visual Studio 2008, Visual Source Safe 2005.
.NET (C#, VB.NET, ASP)
davidesgt 0 4,757 Último mensaje 14 Octubre 2009, 17:32 pm
por davidesgt
Utilizar un cast en c#
.NET (C#, VB.NET, ASP)
joalbela 3 4,162 Último mensaje 16 Marzo 2011, 20:34 pm
por Novlucker
cast en asm
ASM
rmdma() 2 3,027 Último mensaje 16 Febrero 2012, 18:01 pm
por _Enko
Como crear un nuevo cast explicito en c#?
.NET (C#, VB.NET, ASP)
WHK 2 2,535 Último mensaje 17 Julio 2013, 22:57 pm
por WHK
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines