[C con Clase] const en funciones miembro

Steven Davidson srd4121 en njit.edu
Jue Jun 19 23:01:19 CEST 2008


Hola Juan,

Juan wrote:
> Reconozco que no se programar...
> Como convierto esta funcion en const
> Si no la declaro como constante me fuciona, pero retorno un puntero a
> un miembro privado de la clase...

Como ya ha explicado Carlos, no puedes modificar el estado del objeto en 
una función constante. Sin embargo, haces exactamente esto 
explícitamente en el código.

> TCHAR* CListView::GetText(int iRow,int iCol)
> {
>     LVITEM LvItem;
>     memset(&LvItem,0,sizeof(LVITEM));
>     LvItem.mask=LVIF_TEXT;
>     LvItem.iSubItem=iCol;
>     LvItem.pszText=tText;
>     LvItem.cchTextMax=256;
>     LvItem.iItem=iCol;
>     tText[0]=0;

Aquí, modificas 'tText', que semánticamente es un puntero a caracteres 
constantes. O sea, es como si intentaras hacer esto:

CONST TCHAR *tText;
...
tText[0] = 0;

>     SendMessage(hCntrl,LVM_GETITEMTEXT, iRow, (LPARAM)&LvItem);

Aquí tienes otro problema, porque supongo que 'hCntrl' es otro miembro 
privado. Esta función no acepta un manipulador a ventana constante, y 
por tanto implica que 'hCntrl' será modificado. Esto contradice la 
"constancia" de la función miembro, 'GetText()'.

>     return tText;

Espero que esto aclare las dudas.

Steven






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