[C con Clase] Constructor copia
Davidson, Steven
srd4121 en njit.edu
Lun Jul 11 03:54:25 CEST 2016
Hola Yolmer,
El error está en el uso del parámetro. Según el mensaje dado, estás usando
una función miembro que no es constante para un objeto que definiste que sí
es constante. Por ejemplo, escribiste algo así,
class UnaClase
{
private:
char szCadena[100];
public:
const char * Getcadena();
...
};
UnaClase::UnaClase( const UnaClase &ref )
{
const char *psz = ref.Getcadena(); // Error: 'UnaClase::Getcadena()' no
es constante
}
Debes usar solamente funciones (miembro) constantes con objetos constantes.
Por ejemplo,
class UnaClase
{
private:
char szCadena[100];
public:
// Esta función es segura para ser llamada con objetos constantes
const char * Getcadena() const;
...
};
UnaClase::UnaClase( const UnaClase &ref )
{
// Correcto: objeto constante invoca función constante
const char *psz = ref.Getcadena();
}
También ten presente que al adentrarte en el ámbito de la clase,
'UnaClase', el parámetro, 'ref', tiene acceso directo a sus miembros. Por
ejemplo,
UnaClase::UnaClase( const UnaClase &ref )
{
// Acceso directo a sus miembros correspondientes
strcpy( szCadena, ref.szCadena );
}
Espero que esto aclare las dudas.
Steven
2016-07-10 18:57 GMT-04:00 Yolmer Rosales <yolmer.rosales en gmail.com>:
> Hola lista me he topado con algo un poco extraño
>
> según la teoría un constructor copia como el que quiero hacer debe pasarse
> una referencia constante algo así
>
> UnaClase::UnaClase(const UnaClase&)
> {
> Código del constructor;
> }
>
>
> pero este constructor sólo me funcionó bien quitando el "const"
>
> de resto da el siguiente error
>
> error: passing 'const A' as 'this' argument of 'const char*
> A::Getcadena()' discards qualifiers [-fpermissive]|
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20160710/a4a8b8e1/attachment.html>
Más información sobre la lista de distribución Cconclase