casting usando operadores sobrecargados.
Publicado por Oliver++ (339 intervenciones) el 03/06/2003 14:53:40
Francamente el C++ me va a volver loco. :-)
no entiendo porqué el compilador hace cosas tan extrañas.
Mi inconveniente es con casting explícito usando sobrecarga de operadores. lo describo a continuación.
#define NUM_CARACTERES 12
class CCadena
{
public:
CCadena ()
{
cadena = new char [ NUM_CARACTERES ];
}
~CCadena () { delete [] cadena; }
void operator = ( CCadena& a );
void operator = ( const CCadena& a );
operator char* ()//este funciona
{
return cadena;
}
operator const char* ()//pero este no, PORQUE?
{
return cadena;
}
private:
char* cadena;
};
//esta implementación me da error
void CCadena::operator = ( const CCadena& a )
{
strcpy ( cadena, a );
}
//pero esta no
void CCadena::operator = ( CCadena& a )
{
strcpy ( cadena, a );
}
error C2664: 'strcpy' : cannot convert parameter 2 from 'const class CCadena' to 'const char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
prueba archivos.exe - 1 error(s), 0 warning(s)
si tengo ambas converciones perfectamente definidas, PORQUE ME DICE QUE NO PUEDE HACER LA CONVERSIÓN?
he eliminado el resto de la implementación de la clase por simplificar el código, claro no pido que me resuelvan mi problema, solo que me ayuden... :-)
no entiendo porqué el compilador hace cosas tan extrañas.
Mi inconveniente es con casting explícito usando sobrecarga de operadores. lo describo a continuación.
#define NUM_CARACTERES 12
class CCadena
{
public:
CCadena ()
{
cadena = new char [ NUM_CARACTERES ];
}
~CCadena () { delete [] cadena; }
void operator = ( CCadena& a );
void operator = ( const CCadena& a );
operator char* ()//este funciona
{
return cadena;
}
operator const char* ()//pero este no, PORQUE?
{
return cadena;
}
private:
char* cadena;
};
//esta implementación me da error
void CCadena::operator = ( const CCadena& a )
{
strcpy ( cadena, a );
}
//pero esta no
void CCadena::operator = ( CCadena& a )
{
strcpy ( cadena, a );
}
error C2664: 'strcpy' : cannot convert parameter 2 from 'const class CCadena' to 'const char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
prueba archivos.exe - 1 error(s), 0 warning(s)
si tengo ambas converciones perfectamente definidas, PORQUE ME DICE QUE NO PUEDE HACER LA CONVERSIÓN?
he eliminado el resto de la implementación de la clase por simplificar el código, claro no pido que me resuelvan mi problema, solo que me ayuden... :-)
Valora esta pregunta


0