有以下几个错误很具有代表性,麻烦大家帮忙解决:
(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.   

    没做测试,仅供参考
    (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;}
      

  2.   

    感谢3楼,
    (3)CArrayLinePassageInfo::iterator it =m_arrNewData.begin+m_nIndex; 
    不过这个还有点问题
      

  3.   

    除了第2条和版本升级有关外,其他都是语法错误啊。比如第1条,把PushLinePassageInfoCommand函数最后一个参数从指针改成引用就很好;第3条,类型不同,at返回的是元素的引用,其地址当然不能赋值给iterator;第4条,没有老版本的MSDN没法查,但是去掉第3个参数(窗口名)即可;第5条,操作符重载和函数一样,你的声明有返回值,当然要return一个值,一般是通过拷贝构造函数返回:return (*this);