[C con Clase] passing 'const ...' as 'this' argument of 'void ...' discards qualifiers

User usuarioanonimomysql en gmail.com
Mar Mayo 15 01:28:01 CEST 2012


Hola,

En efecto, 'other' es constante, no lo he puesto anres, pero es un
parámetro constante del método 'myClass::doSomething()', El prototipo, por
tanto, quedaría así: *void myClass::doSomething(const myObjectType
&myObject, const myOtherClass* other) const*.

La solución que propones me funciona, pero ¿se podrá hacer constante al
método 'setMember()' y dejar constante al parámetro 'other'? Lo que quiero
hacer en 'setMember()' es asignar el valor de 'myObject.getMember()' a un
miembro de la clase myOtherClass.

Saludos.

El 15 de mayo de 2012 01:09, Steven Davidson <srd4121 en njit.edu> escribió:

> Hola User,
>
>
> On 5/14/2012 5:21 PM, User wrote:
>
>> Hola,
>>
>> Estoy teniendo un problema al hacer un set desde un método constante.
>> Pongamos que tengo este método constante:
>>
>> void myClass::doSomething(const myObjectType &myObject) const
>> {
>>     ...
>>     other->setMember(myObject.**getMember()); // getMember() tiene este
>> prototipo: myOtherObjectType* getMember() const;
>>     ...
>> }
>>
>> void myOtherClass::setMember(const myOtherObjectType* myOtherObject)
>> {
>>     ...
>>      m_ myOtherObject  = myOtherObject; // La definición de  m_
>> myOtherObject es: const myOtherObjectType*     m_ myOtherObject ;
>>     ...
>> }
>>
>> El error es el siguiente:
>>
>> In member function 'void myClass::doSomething(const myObjectType
>> &myObject) const':
>> C:\project\src\MyClass.cpp:89: error: passing 'const myOtherClass' as
>> 'this' argument of 'void  myOtherClass::setMember(const
>> myOtherObjectType *)' discards qualifiers
>>
>> Parece que todos los tipos, de origen y destino coinciden. ¿Por qué me
>> aparece ese error? ¿Cómo lo puedo solucionar?
>>
>>
> Según el mensaje del error, el problema está con 'other' que es de tipo
> 'const myOtherClass' pero estás invocando la función miembro, 'setMember()'
> la cual NO es constante. Es decir, aplicas una función no constante al
> objeto constante, 'other'.
>
> Esto es obviamente inválido y posiblemente ilógico. Debes definir 'other'
> de un tipo no constante para invocar 'setMember()'.
>
>
> Espero haber aclarado la duda.
>
> Steven
>
>
> ______________________________**_________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/**mailman/listinfo/cconclase_**
> listas.conclase.net<http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net>
> Bajas: http://listas.conclase.net/**index.php?gid=2&mnu=FAQ<http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120515/7b978b15/attachment.html>


Más información sobre la lista de distribución Cconclase