Здраствуйте.
В очередной раз я напоролся на неразрешимую проблему. Может кто-то подскажет мне, что сделать и этим спасет меня — буду очень благодарен.
Вобщем, вот в чем дело. Дали мне проект пределывать. Был написан изначально на Visual Studio 2002. Открываю я этот проект и пытаюсь собрать на Visual Studio 2005:
Ну вот, собираю я этот проект и вижу ошибку :
error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CFlatHeaderCtrl::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'
Cast from base to derived requires dynamic_cast or static_cast
в строке объявления события ON_WM_NCHITTEST в карте сообщений класса CFlatHeaderCtrl:
BEGIN_MESSAGE_MAP(CFlatHeaderCtrl, CHeaderCtrl)
FX_MSG_MAP(CFlatHeaderCtrl)
//{{AFX_MSG_MAP(CFlatHeaderCtrl)
ON_WM_NCHITTEST()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
Объявление класса и метода:
class CFlatHeaderCtrl : public CHeaderCtrl
{
DECLARE_DYNCREATE(CFlatHeaderCtrl)
...
// Generated message map functions
protected:
//{{AFX_MSG(CFlatHeaderCtrl)
...
afx_msg UINT OnNcHitTest(CPoint point);
...
//}}AFX_MSG
...
};
Довольно странно, учитывая, что функция OnNcHitTest, унаследованная от CHeaderCtrl возвращает LRESULT.
Поначалу, я попытался решить эту проблему в лоб — просто заменил в объявлении и реализации OnNchitTest возвращаемое значение c UINT на LRESULT. В отместку мне высыпался список из 500-та ошибок.
Но ничего лучшего я не придумал.
В этом коде были замечены и другие странные вещи: переменную, объявленную внутри for(...) продолжали использовать и вне тела цикла!