回 帖 发 新 帖 刷新版面

主题:c2664 错误到底是怎么回事?

程序:
CString course4[]={"民法学","刑法","西方法律","军事理论基础"};

error C2440: 'initializing' : cannot convert from 'const char [11]' to 'CString'
        Constructor for class 'ATL::CStringT<BaseType,StringTraits>' is declared 'explicit'
        with
        [
            BaseType=wchar_t,
            StringTraits=StrTraitMFC_DLL<wchar_t>
        ]
这是什么意思啊? 希望能解释一下,我用的是visual studio 2005 ,总是出现这个错误,我一直没搞懂。

回复列表 (共5个回复)

沙发

CString不能这样付直的~你这是给字符数组付直
你要用数组最好用CStringArray或者CStringList你那种用法很浪费内存~也很危险呵呵!我以前这么做被我们经理骂死了呵呵!

板凳

我也遇到了相同的问题 但是的代码是:
  static char* selection[] = {"进程","启动组","注册表","端口",
                                "文件","配置","匹配文件","插件"};
    CListCtrl* pList =
        (CListCtrl*) GetDlgItem(IDC_LISTVIEW1);
    pList->SetImageList(&m_selectList,LVSIL_SMALL);
    for(n =0;n<8;n++)
    {
        pList->InsertItem(0,selection[n],0);//这里出现错误
    }

错误    1    error C2664: 'int CListCtrl::InsertItem(int,LPCTSTR,int)' : cannot convert parameter 2 from 'char *' to 'LPCTSTR'    d:\my projects\system_watch\system_watch\systemdialog.cpp    68    

3 楼


先修改工程属性试下:项目——工程属性——常规——看右边选择字符集为使用多字节....

4 楼

这种问题应该是出现在vc6以后的版本中,
[quote]
先修改工程属性试下:项目——工程属性——常规——看右边选择字符集为使用多字节....[/quote]
这样子解决可以,但是我实验过,界面就会出现一定的变化。
楼主的这个问题,实际上是由于微软的一些改进,M$的《自 Visual C++ 6.0 以来 ATL 7.0 和 MFC 7.0 中的重大更改》之中就提到过BSTR 转换到 CString,
可以在使用时,比如:CString str = L"你好,世界!";
        MassageBox(L"你的输入有误");

5 楼

CString course4[] = { CString("民法学"), CString("刑法"), CString("西方法律"), CString("军事理论基础") };

我来回复

您尚未登录,请登录后再回复。点此登录或注册