如题,一个CGridCtrl控件,在VC6下调试可以使用,在VS2008下总是报错,那位知道啊
编译结果如下:
   正在编译...
GridCtrl.cpp
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(396) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(396) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(396) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(397) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(1845) : error C2065: “pos”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(1845) : error C2065: “pos”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(1849) : error C2065: “pos”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2084) : warning C4244: “初始化”: 从“ULONGLONG”转换到“DWORD”,可能丢失数据
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2121) : error C2440: “初始化”: 无法从“LPSTR”转换为“ATL::CStringT”
        with
        [
            BaseType=wchar_t,
            StringTraits=StrTraitMFC_DLL
        ]
        class“ATL::CStringT”的构造函数声明为“explicit”
        with
        [
            BaseType=wchar_t,
            StringTraits=StrTraitMFC_DLL
        ]
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2490) : error C2065: “col”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2502) : error C2065: “col”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2505) : error C2065: “col”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2521) : error C2065: “row”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2533) : error C2065: “row”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2536) : error C2065: “row”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2582) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2582) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2586) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2586) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2586) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2588) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2595) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2595) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2622) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2622) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2628) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2628) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2628) : error C2065: “i”: 未声明的标识符
“CUIntArray::InsertAt”: 对重载函数的调用不明确
        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxcoll.h(336): 可能是“void CUIntArray::InsertAt(INT_PTR,CUIntArray *)”
        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxcoll.h(333): 或       “void CUIntArray::InsertAt(INT_PTR,UINT,INT_PTR)”
        试图匹配参数列表“(int, int)”时
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(3312) : error C2668: “CUIntArray::InsertAt”: 对重载函数的调用不明确
        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxcoll.h(336): 可能是“void CUIntArray::InsertAt(INT_PTR,CUIntArray *)”
        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxcoll.h(333): 或       “void CUIntArray::InsertAt(INT_PTR,UINT,INT_PTR)”
        试图匹配参数列表“(int, int)”时
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(4377) : error C2065: “i”: 未声明的标识符
“i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(5509) : error C2440: “初始化”: 无法从“const char [6]”转换为“ATL::CStringT”
        with
        [
            BaseType=wchar_t,
            StringTraits=StrTraitMFC_DLL
        ]
        class“ATL::CStringT”的构造函数声明为“explicit”
        with
        [
            BaseType=wchar_t,
            StringTraits=StrTraitMFC_DLL
        ]
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(6019) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(6019) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(6019) : error C2065: “i”: 未声明的标识符
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(6023) : error C2065: “i”: 未声明的标识符
TitleTip.cpp
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\titletip.cpp(297) : error C2360: “pts”的初始化操作由“case”标签跳过
        d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\titletip.cpp(258) : 参见“pts”的声明
d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\titletip.cpp(298) : error C2360: “pts”的初始化操作由“case”标签跳过
        d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\titletip.cpp(258) : 参见“pts”的声明
正在生成代码...
(提示帖子内容过长,相同的报错我删了)
上面d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\是我引用控件的位置,其他的错误也许是unicode字符引起的,但是“pts”的初始化操作由“case”标签跳过是什么意思啊 

解决方案 »

  1.   

    把i ,col声明为全局的就可以了。
    比如
    for(int i = 0; i<10; i++)
    {
    }
    int b = i;//vc6 ok, vs2008 error应该
    int i = 0;
    for(int i=0; i<10; i++)
    {
    }
    int b = i;//ok
      

  2.   


    我改了一遍 然后有如下错误 不知道怎么办------ 已启动生成: 项目: BillsManager, 配置: Debug Win32 ------
    正在编译...
    GridCtrl.cpp
    c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxconv.h(51) : error C2440: “return”: 无法从“LPOLESTR”转换为“LPTSTR”
            与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
    d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(1845) : error C2065: “pos”: 未声明的标识符
    d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(1845) : error C2065: “pos”: 未声明的标识符
    d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(1849) : error C2065: “pos”: 未声明的标识符
    d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(2084) : warning C4244: “初始化”: 从“ULONGLONG”转换到“DWORD”,可能丢失数据
    d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(3278) : error C2668: “CUIntArray::InsertAt”: 对重载函数的调用不明确
            c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxcoll.h(336): 可能是“void CUIntArray::InsertAt(INT_PTR,CUIntArray *)”
            c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxcoll.h(333): 或       “void CUIntArray::InsertAt(INT_PTR,UINT,INT_PTR)”
            试图匹配参数列表“(int, int)”时
    d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\gridctrl.cpp(3330) : error C2668: “CUIntArray::InsertAt”: 对重载函数的调用不明确
            c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxcoll.h(336): 可能是“void CUIntArray::InsertAt(INT_PTR,CUIntArray *)”
            c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxcoll.h(333): 或       “void CUIntArray::InsertAt(INT_PTR,UINT,INT_PTR)”
            试图匹配参数列表“(int, int)”时
    TitleTip.cpp
    d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\titletip.cpp(297) : error C2360: “pts”的初始化操作由“case”标签跳过
            d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\titletip.cpp(258) : 参见“pts”的声明
    d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\titletip.cpp(298) : error C2360: “pts”的初始化操作由“case”标签跳过
            d:\program files\vcprogram\billsmanager\billsmanager\gridctrl_src\titletip.cpp(258) : 参见“pts”的声明
    正在生成代码...
    生成日志保存在“file://d:\Program Files\VCprogram\BillsManager\BillsManager\Debug\BuildLog.htm”
    BillsManager - 8 个错误,1 个警告
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
      

  3.   


    哈哈 在VC6.0下,自己生成一个新的该类型的控件,(静态)编译成ActiveX,然后到2008里面去用 汗,最好还是一点一点的改你里面那些没有
    声明的变量。
      

  4.   

    两个VC对c++标准支持的都不一样,还怎么能用以前的控件呢!