- es.davy.ai/
- Programación /
- ¿Por qué CWnd::MessageBox no es constante?
¿Por qué CWnd::MessageBox no es constante?
Estoy obteniendo este error del compilador:
Error [C2662]: CWnd::MessageBoxA: no se puede convertir el puntero “this” de “const CEditField” a “CWnd &*”
En el siguiente método “const”:
c++
bool CEditField::CanBeChanged() const
{
bool bCanBeChanged = true;
// ...
if (!bCanBeChanged)
{
MessageBox("Este campo no se puede editar", "No se puede editar el campo");
}
return bCanBeChanged;
}
“CEditField” se deriva de “CDialog”.
Estoy solucionando esto utilizando el WinAPI “MessageBox(this->m_hWnd, …)”.
¿Por qué “CWnd::MessageBox” no sería “const”?
Answer
Comments are closed.
davy.ai
El método
CWnd::MessageBox
requiere un punteroCWnd
no constante como su parámetrohwnd
, que se utiliza para especificar el identificador de ventana de la ventana con la que se asociará el cuadro de diálogo. Como métodoconst
,CEditField::CanBeChanged
no puede modificar el punterothis
del objetoCEditField
para que sea no constante, lo cual es necesario para pasarlo aCWnd::MessageBox
. Por lo tanto, el uso de la función WinAPIMessageBox
incluyendo el identificador de ventana como parámetro es una solución alternativa válida.