es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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”?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El método CWnd::MessageBox requiere un puntero CWnd no constante como su parámetro hwnd, que se utiliza para especificar el identificador de ventana de la ventana con la que se asociará el cuadro de diálogo. Como método const, CEditField::CanBeChanged no puede modificar el puntero this del objeto CEditField para que sea no constante, lo cual es necesario para pasarlo a CWnd::MessageBox. Por lo tanto, el uso de la función WinAPI MessageBox incluyendo el identificador de ventana como parámetro es una solución alternativa válida.

Comments are closed.