Ver Mensaje Individual
  #1  
Antiguo 09-03-2010
Avatar de rcarrillom
[rcarrillom] rcarrillom is offline
Miembro Premium
 
Registrado: dic 2004
Ubicación: UK / North Sea / Norway / Golfo de México / Frente a mi Laptop
Posts: 219
Reputación: 20
rcarrillom Va por buen camino
Error C2248en C++: cannot access protected member

Saludos al foro, espero que sea el foro adecuado para mi duda.

Hace ya un buen que no programaba en C++, la versión que estoy usando es VS 2008 Professional, instalación completa.

Me han dado un código ya desarrollado que supuestamente compila, con la interfaz ribbon (qué manía de copiar interfaces) para hacer ciertas mejoras. No tengo contacto con el desarrollador original. El problema que tengo es el siguiente:

Cita:
error C2248: 'CMFCPropertyGridProperty::m_varValue' : cannot access protected member declared in class 'CMFCPropertyGridProperty'
c:\archivos de programa\microsoft visual studio 9.0\vc\atlmfc\include\afxpropertygridctrl.h(212) : see declaration of 'CMFCPropertyGridProperty::m_varValue'
c:\archivos de programa\microsoft visual studio 9.0\vc\atlmfc\include\afxpropertygridctrl.h(33) : see declaration of 'CMFCPropertyGridProperty'
Originado por la línea de código

Código:
((CMainFrame*)AfxGetMainWnd())->m_wndProperties.pKPInterval->m_varValue.bstrVal = meandistanceStr.AllocSysString();
Entiendo que no hay acceso a m_varValue por estar en la seccion protected, aunque para mi lógica sí deberia ser posible, de hecho no he modificado el código fuente aún, sólo intenté compilarlo. Tengo otras líneas con error como

Código:
    m_wndprogressBar.m_nWidth = 400;
    m_wndprogressBar.m_nHeight = 30;
con el error

Cita:
.\MainFrm.cpp(76) : error C2248: 'CMFCRibbonProgressBar::m_nWidth' : cannot access protected member declared in class 'CMFCRibbonProgressBar'
c:\archivos de programa\microsoft visual studio 9.0\vc\atlmfc\include\afxribbonprogressbar.h(69) : see declaration of 'CMFCRibbonProgressBar::m_nWidth'
c:\archivos de programa\microsoft visual studio 9.0\vc\atlmfc\include\afxribbonprogressbar.h(25) : see declaration of 'CMFCRibbonProgressBar'
Y otro ejemplo

Código:
        CMyView* pViewGraph = (CMyView*)((CMainFrame*)AfxGetMainWnd())->m_pViewActive;
con el error

Cita:
.\MyDoc.cpp(178) : error C2248: 'CFrameWnd::m_pViewActive' : cannot access protected member declared in class 'CFrameWnd'
C:\Archivos de programa\Microsoft Visual Studio 9.0\VC\atlmfc\include\afxwin.h(3866) : see declaration of 'CFrameWnd::m_pViewActive'
C:\Archivos de programa\Microsoft Visual Studio 9.0\VC\atlmfc\include\afxwin.h(3720) : see declaration of 'CFrameWnd'
De hecho son los tres únicos tipos de error pero en mas de 100 lineas similares. Una solución chapucera fué mover las declaraciones de protected hacia public, pero obviamente no debo modificar los fuentes del sistema, sólo los del programa ya desarrollado. Logré correr el programa de esta manera pero me generó errores al momento de refrescar la ventana de la aplicación.

Cómo puedo arreglar estos errores sin modificar los fuentes de C++? Es algo de namespaces? Ando perdido. Espero que sea un setting de C++, ya que no me proporcionaron el archivo original .sln, y solamente un archivo .suo con sólo parámetros de release.

Toda la ayuda es bienvenida
__________________
eLcHiCoTeMiDo - Rompecorazones profesional
Yo no soy presumido; ¿Pero de qué sirve mi humilde opinión contra la de los espejos?
Salva a un nylon, usa prendas de piel de foca
Responder Con Cita