请教一下 
CArray<CPoint,CPoint>  m_AllContourPoints; 
int allpointsnum = m_AllContourPoints.GetCount();为什么会提示  warning C4244: 'initializing' : conversion from 'INT_PTR' to 'int',possible loss of dataINT_PTR 是什么 之前也用过这个函数怎么都没有报错呢?

解决方案 »

  1.   

    在32位环境下INT_PTR等效于int,但是64位环境就不行。虽然在32位环境下编译没有任何问题,但是编译器还是会向你发出警告。最好的办法是强制转换可以消除警告。
    int   allpointsnum   =   (int)m_AllContourPoints.GetCount(); 
      

  2.   

    64位编译开关打开了?#if defined(_WIN64) 
     typedef __int64 INT_PTR; 
    #else 
     typedef int INT_PTR;
    #endif
      

  3.   

    谢谢 弱弱的问一下 这个32位 或者64位 是在程序属性里有设置吗我用的同一台 为啥有时不warning呢?
      

  4.   

    我的CArray为什么没有GetCount函数?
      

  5.   

    MFC的CArray跟ATL的CArray成员函数是不太一样的,有的用GetSize,有的用GetCount,有的两个都有。再说明一下,这个警告只是编译器的友善警告,防止你改变32位为64位再编译,无论你用哪种位,它都会警告
      

  6.   

    项目->xxx属性-->常规-->检测64位可移植性问题
    改成否
      

  7.   

    恩 按楼上的改了 就不用强制转换了 谢谢不过还是有一点疑惑 之前那个程序也 检测64位可移植性问题 也是Yes, 就能用呢