有以下几个错误很具有代表性,麻烦大家帮忙解决:
(1)error C2664: 'CUpdateScreen::PushLinePassageInfoCommand' : cannot convert parameter 4 from 'std::_Vector_iterator<_Ty,_Alloc>' to 'ATL::CTime *'
typedef std::vector<CTime> CArrCTime;
CArrCTime ArrayTm;
BOOL CUpdateScreen::PushLinePassageInfoCommand(DDWORD& nCli_job_no, CArrDDWORD arrdevid, BYTE nRowNum, CTime* tm){...}
PushLinePassageInfoCommand(nCli_job_no, arrdevid, nRowNum, ArrayTm.begin());
(2)error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CCoolBar::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'
网上的解释是,在vs2005中消息响应函数的返回值类型必须是LRESULT ,但ON_WM_NCHITTEST()是系统函数阿,如何修改BEGIN_MESSAGE_MAP(CCoolBar, baseCCoolBar)
//{{AFX_MSG_MAP(CCoolBar)
ON_WM_NCLBUTTONUP()
ON_WM_NCHITTEST()-----------------这句有问题
//}}AFX_MSG_MAP
ON_MESSAGE(WM_SETTEXT, OnSetText)
END_MESSAGE_MAP()
(3)迭代器赋值问题
error C2440: 'initializing' : cannot convert from 'LINEPASSAGE *' to 'std::_Vector_iterator<_Ty,_Alloc>'CArrayLinePassageInfo m_arrNewData;
int m_nIndex;
CArrayLinePassageInfo::iterator it =&m_arrNewData.at(m_nIndex);
(4)以下代码在vc6下没问题的阿
error C2660: 'CTreeCtrl::CreateEx' : function does not take 7 argumentsCTreeCtrl m_tree;
m_tree.CreateEx(0, WC_TREEVIEW,"",
WS_POPUP | WS_BORDER | WS_CLIPSIBLINGS |TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS |TVS_DISABLEDRAGDROP, CRect(0, 0, 0, 0),GetParent(),0);(5)操作符重载出现的问题
error C4716: 'CMandatoryDeviceCommand::operator=' : must return a value CMandatoryDeviceCommand operator =(const CMandatoryDeviceCommand& obj){ Clone(obj); }
(1)error C2664: 'CUpdateScreen::PushLinePassageInfoCommand' : cannot convert parameter 4 from 'std::_Vector_iterator<_Ty,_Alloc>' to 'ATL::CTime *'
typedef std::vector<CTime> CArrCTime;
CArrCTime ArrayTm;
BOOL CUpdateScreen::PushLinePassageInfoCommand(DDWORD& nCli_job_no, CArrDDWORD arrdevid, BYTE nRowNum, CTime* tm){...}
PushLinePassageInfoCommand(nCli_job_no, arrdevid, nRowNum, ArrayTm.begin());
(2)error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CCoolBar::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'
网上的解释是,在vs2005中消息响应函数的返回值类型必须是LRESULT ,但ON_WM_NCHITTEST()是系统函数阿,如何修改BEGIN_MESSAGE_MAP(CCoolBar, baseCCoolBar)
//{{AFX_MSG_MAP(CCoolBar)
ON_WM_NCLBUTTONUP()
ON_WM_NCHITTEST()-----------------这句有问题
//}}AFX_MSG_MAP
ON_MESSAGE(WM_SETTEXT, OnSetText)
END_MESSAGE_MAP()
(3)迭代器赋值问题
error C2440: 'initializing' : cannot convert from 'LINEPASSAGE *' to 'std::_Vector_iterator<_Ty,_Alloc>'CArrayLinePassageInfo m_arrNewData;
int m_nIndex;
CArrayLinePassageInfo::iterator it =&m_arrNewData.at(m_nIndex);
(4)以下代码在vc6下没问题的阿
error C2660: 'CTreeCtrl::CreateEx' : function does not take 7 argumentsCTreeCtrl m_tree;
m_tree.CreateEx(0, WC_TREEVIEW,"",
WS_POPUP | WS_BORDER | WS_CLIPSIBLINGS |TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS |TVS_DISABLEDRAGDROP, CRect(0, 0, 0, 0),GetParent(),0);(5)操作符重载出现的问题
error C4716: 'CMandatoryDeviceCommand::operator=' : must return a value CMandatoryDeviceCommand operator =(const CMandatoryDeviceCommand& obj){ Clone(obj); }
(1)PushLinePassageInfoCommand(nCli_job_no, arrdevid, nRowNum, &(*ArrayTm.begin()));
(2)不是改ON_WM_NCHITTEST()而是改对应的函数,LRESULT OnHittest()
(3)CArrayLinePassageInfo::iterator it =m_arrNewData.begin+m_nIndex;
(4)看msdn BOOL CreateEx(
DWORD dwExStyle,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID
);(5)CMandatoryDeviceCommand operator =(const CMandatoryDeviceCommand& obj){ Clone(obj); return *this;}
(3)CArrayLinePassageInfo::iterator it =m_arrNewData.begin+m_nIndex;
不过这个还有点问题