Perdón,<br><br>He repasado todo y en efecto funciona, os paso el código, consta del main.cpp y tres clases:<br><br><b>main.cpp:</b><br>#include <iostream><br>#include "AClass.h"<br>#include "BClass.h"<br>
<br>using namespace std;<br><br>int main()<br>{<br>    const AClass* aClass = new AClass();<br>    const BClass* bClass = new BClass();<br>    aClass->setC(bClass->getC());<br>    cout << "Hello world!" << endl;<br>
    return 0;<br>}<br><b><br>AClass.h:</b><br>#ifndef ACLASS_H<br>#define ACLASS_H<br><br>// Fordward declaration<br>class CClass;<br><br>class AClass<br>{<br>    public:<br>        AClass();<br>        ~AClass();<br>    public:<br>
        void setC(const CClass* C) const;<br>        const CClass* getC();<br>    private:<br>        mutable const CClass* m_C;<br>};<br><br>#endif<br><br><b>AClass.cpp:</b><br>#include "AClass.h"<br><br>AClass::AClass()<br>
{<br>}<br><br>AClass::~AClass()<br>{<br>}<br><br>void AClass::setC(const CClass* C) const<br>{<br>    m_C = C;<br>}<br><br>const CClass* AClass::getC()<br>{<br>    return m_C;<br>}<br><br><b>BClass.h:</b><br>#ifndef BCLASS_H<br>
#define BCLASS_H<br><br>// Fordward declaration<br>class CClass;<br><br>class BClass<br>{<br>    public:<br>        BClass();<br>        ~BClass();<br>    public:<br>        void setC(CClass* C);<br>        CClass* getC() const;<br>
    private:<br>        CClass* m_C;<br>};<br><br>#endif<br><br><b>BClass.cpp:</b><br>#include "BClass.h"<br><br>BClass::BClass()<br>{<br>}<br><br>BClass::~BClass()<br>{<br>}<br><br>void BClass::setC(CClass* C)<br>
{<br>    m_C = C;<br>}<br><br>CClass* BClass::getC() const<br>{<br>    return m_C;<br>}<br><b><br>CClass.h:</b><br>#ifndef CCLASS_H<br>#define CCLASS_H<br><br>class CClass<br>{<br>    public:<br>        CClass();<br>        ~CClass();<br>
    public:<br>        void setValue(int value);<br>        int getValue();<br>    private:<br>        int m_value;<br>};<br><br>#endif<br><br><b>CClass.cpp:</b><br>#include "CClass.h"<br><br>CClass::CClass()<br>
{<br>}<br><br>CClass::~CClass()<br>{<br>}<br><br>void CClass::setValue(int value)<br>{<br>    m_value = value;<br>}<br><br>int CClass::getValue()<br>{<br>    return m_value;<br>}<br><br>Muchas gracias Steven, porque aunque conceptualmente y semánticamente es incorrecto viene muy bien para darse cuenta de cómo funciona 'const'.<br>
<br>Saludos.<br><br><div class="gmail_quote">El 15 de mayo de 2012 19:15, User <span dir="ltr"><<a href="mailto:usuarioanonimomysql@gmail.com" target="_blank">usuarioanonimomysql@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hola,<br><br>He probado lo de mutable y obtengo este error:<br><br><b>error: assignment of data-member 'myOtherClass::m_ myOtherObject' in read-only structure</b><br><br>He establecido el método 'setMember()' como constante y e indicado que el miembro a modificar sea 
"mutable".<br><br>¿Por qué no lo permite si el atributo de la clase está declarado como mutable y el método es constante?<br><br>Saludos.<br><br><div class="gmail_quote">El 15 de mayo de 2012 12:01, User <span dir="ltr"><<a href="mailto:usuarioanonimomysql@gmail.com" target="_blank">usuarioanonimomysql@gmail.com</a>></span> escribió:<div>
<div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hola,<br><br>Es sólo para aprender el uso de const y para dominarlo bien. ¿Me podrías poner un ejemplo de eliminar la parte de 'const' temporalmente a través de 'const_cast'? Probaré lo de mutable.<br>

<br>Saludos.<br>
<br><div class="gmail_quote">El 15 de mayo de 2012 03:15, Steven Davidson <span dir="ltr"><<a href="mailto:srd4121@njit.edu" target="_blank">srd4121@njit.edu</a>></span> escribió:<div><div><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


Hola User,<div><br>
<br>
On 5/14/2012 7:28 PM, User wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hola,<br>
<br>
En efecto, 'other' es constante, no lo he puesto anres, pero es un<br>
parámetro constante del método 'myClass::doSomething()', El<br>
prototipo, por tanto, quedaría así: void myClass::doSomething(const<br>
myObjectType &myObject, const myOtherClass* other) const.<br>
<br>
La solución que propones me funciona, pero ¿se podrá hacer constante<br>
al método 'setMember()' y dejar constante al parámetro 'other'? Lo<br>
que quiero hacer en 'setMember()' es asignar el valor de<br>
'myObject.getMember()' a un miembro de la clase myOtherClass.<br>
<br>
</blockquote>
<br></div>
Como he dicho antes, no tiene sentido que invoques 'setMember()', la cual por su nombre significa que vas a modificar un miembro de "este objeto", con un objeto constante. Es como intentar hacer esto:<br>



<br>
const int num = 10;<br>
<br>
num = 5;<br>
<br>
Aparte de ser semánticamente incorrecto, también es una operación ilógica. Por eso te menciono que revises el diseño de lo que quieres hacer. Personalmente, si vas a modificar un objeto que es constante, entonces significa que no tienes las ideas claras.<br>



<br>
Ahora bien, hay otra forma de saltarse toda esta lógica, que es eliminando la parte de 'const' temporalmente a través de 'const_cast'. La otra solución es la de establecer que 'setMember()' sea constante - cosa que estoy MUY en contra porque no tiene sentido alguno - pero indicar que ese miembro a modificar sea "mutable". Por ejemplo,<br>



<br>
class myOtherClass<br>
{<br>
  mutable int miembro;<br>
  ...<br>
};<br>
<br>
<br>
Reitero que debes pensar MUY bien lo que quieres hacer, ya que si 'other' es constante, no tiene sentido modificarlo, y si se debe modificar, entonces no debería ser constante.<br>
<br>
<br>
Espero que esto te oriente un poco.<div><div><br>
<br>
Steven<br>
<br>
<br>
______________________________<u></u>_________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/<u></u>mailman/listinfo/cconclase_<u></u>listas.conclase.net</a><span onmouseout="cancel = false; window.setTimeout(WRCHideContent, 1000); clearTimeout(showTimer);" onmouseover=" var self = this; showTimer = window.setTimeout(function(){WRCShowContent({'rating':{'value':-1,'weight':-1},'flags':{},'single':false,'ttl':7200,'expireTime':'20120515194601'}, self.className)},600);" class="wrc0" style="padding-right:16px;width:16px;height:16px"></span><span style="padding-right:16px;width:16px;min-height:16px"></span><span style="padding-right:16px;width:16px;min-height:16px"></span><br>



Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/<u></u>index.php?gid=2&mnu=FAQ</a><span onmouseout="cancel = false; window.setTimeout(WRCHideContent, 1000); clearTimeout(showTimer);" onmouseover=" var self = this; showTimer = window.setTimeout(function(){WRCShowContent({'rating':{'value':-1,'weight':-1},'flags':{},'single':false,'ttl':7200,'expireTime':'20120515194601'}, self.className)},600);" class="wrc0" style="padding-right:16px;width:16px;height:16px"></span><span style="padding-right:16px;width:16px;min-height:16px"></span><span style="padding-right:16px;width:16px;min-height:16px"></span><br>



</div></div></blockquote></div></div></div><br>
</blockquote></div></div></div><br>
</blockquote></div><br>