[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