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

Steven Davidson srd4121 en njit.edu
Mar Mayo 15 01:09:03 CEST 2012


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





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