[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