У меня есть проект Visual C++ 6.0, который мне нужно обновить, и я без проблем импортирую его в Visual Studio 2012, однако во время компиляции я получаю следующие четыре ошибки:
Ошибка 1 ошибка C2440: «static_cast»: невозможно преобразовать из «void (__thiscall CTrendDlg::*) (int)» в «void (__thiscall CCmdTarget::*) (UINT)» c:\users\nima\desktop\ffls_scode\ Trenddlg.cpp 89
Ошибка 6 ошибка C2440: «static_cast»: невозможно преобразовать из «void (__thiscall CManualDlg::*) (int)» в «void (__thiscall CCmdTarget::*) (UINT)» c:\users\nima\desktop\ffls_scode\ manualdlg.cpp 175
Ошибка 7 ошибка C2440: «static_cast»: невозможно преобразовать из «void (__thiscall CManualDlg::*) (int)» в «void (__thiscall CCmdTarget::*) (UINT)» c:\users\nima\desktop\ffls_scode\ manualdlg.cpp 177
Ошибка 8 ошибка C2440: «static_cast»: невозможно преобразовать из «void (__thiscall CManualDlg::*) (int)» в «void (__thiscall CCmdTarget::*) (UINT)» c:\users\nima\desktop\ffls_scode\ manualdlg.cpp 178
Первая ошибка возникает из-за следующей строки кода, остальные аналогичны:
ON_COMMAND_RANGE(IDC_CHECK_PEN, IDC_CHECK_GRID, OnCheckButtons)
ON_COMMAND_RANGE(IDC_REF_L1, IDC_REF_L16, OnCarriagePos)
ON_COMMAND_RANGE(IDC_VALVE_L1, IDC_VALVE_L4, OnValve)
ON_COMMAND_RANGE(IDC_SAMPLE_L_A, IDC_SAMPLE_L_B, OnDetector)
Где (например) функция OnCheckButtons определена в TrendDlg.cpp следующим образом:
void CTrendDlg::OnCheckButtons(int id)
{
UINT state;
RECT rect = {m_rect.left-60, m_rect.top-10, m_rect.right+40, m_rect.bottom+30};
state = ((CButton*)GetDlgItem(id))->GetState();
if ((state & 0x0003) == 1)
{
switch (id)
{
case IDC_CHECK_PEN:
m_pen = TRUE;
break;
case IDC_CHECK_LINE:
m_line = TRUE;
break;
case IDC_CHECK_BUBBLES:
m_bubble = TRUE;
break;
case IDC_CHECK_GRID:
m_grid = TRUE;
}
}
else
{
switch (id)
{
case IDC_CHECK_PEN:
m_pen = FALSE;
break;
case IDC_CHECK_LINE:
m_line = FALSE;
break;
case IDC_CHECK_BUBBLES:
m_bubble = FALSE;
break;
case IDC_CHECK_GRID:
m_grid = FALSE;
}
}
InvalidateRect(&rect);
}
мой диапазон карт сообщений также определяется как:
BEGIN_MESSAGE_MAP(CTrendDlg, CDialog)
Почему компилятор пытается привести типы CTrendDlg и CManualDlg к типу CCmdTarget? есть ли изменения в структуре классов от VC 6.00 до VS2012?
Я ценю вашу помощь.