error C2664: “CListBox::AddString”: 不能将参数 从“const char [5]”转换为“LPCTSTR”
2011-05-15 20:00
537 查看
往列表框中添加信息的时候出现错误:error C2664: “CListBox::AddString”: 不能将参数 从“const char [5]”转换为“LPCTSTR”;代码如下:
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString("北京");
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString("天津");
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString("上海");
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString("深圳");
在网上查了一下,改为:
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString(_T("北京"));
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString(_T("天津"));
或者
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString(TEXT("上海"));
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString(TEXT("深圳"));
就可以了。(原帖:http://bbs.bccn.net/viewthread.php?tid=322207&page=1#pid1853285)
(1)函数 CListBox::AddString(http://baike.baidu.com/view/2078035.htm#2)
int AddString( LPCTSTR lpszItem );
返回值: 表框中字符串的基于零的索引。如果出错,则返回LB_ERR;如果没有足够的有效空间存储新字符串,则为LB_ERRSPACE。
参数:lpszItem 指向将被添加的空终止字符串的指针。
说明:调用此成员函数添加一个字符串到列表框中。如果列表框未被创建为LBS_SORT风格,则字符串被添加到列表末尾。否则,字符串被插入到列表中,并把列表排序。如果列表被创建为LBS_SORT 风格而不是LBS_HASSTRINGS风格,则框架通过对CompareItem成员函数的一个或多个调用来排序列表。
(2)LPCTSTR类型(http://baike.soso.com/v7694572.htm?ch=ch.bk.innerlink)
如何理解LPCTSTR类型?
L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
P表示这是一个指针
C表示是一个常量
T表示在Win32环境中, 有一个_T宏
这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
STR表示这个变量是一个字符串
所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。
同样, LPCSTR就只能是一个ANSI字符串,在程序中我们大部分时间要使用带T的类型定义。
LPCTSTR == const TCHAR *
CString 和 LPCTSTR 可以说通用。 原因在于CString定义的自动类型转换,没什么奇特的,最简单的C++操作符重载而已。
常量字符串ansi和unicode的区分是由宏_T来决定的。但是用_T("abcd")时, 字符串"abcd"就会根据编译时的是否定一_UNICODE来决定是char* 还是 w_char*。 同样,TCHAR 也是相同目的字符宏。
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString("北京");
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString("天津");
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString("上海");
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString("深圳");
在网上查了一下,改为:
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString(_T("北京"));
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString(_T("天津"));
或者
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString(TEXT("上海"));
((CListBox*)GetDlgItem(IDC_LIST_CITY))->AddString(TEXT("深圳"));
就可以了。(原帖:http://bbs.bccn.net/viewthread.php?tid=322207&page=1#pid1853285)
(1)函数 CListBox::AddString(http://baike.baidu.com/view/2078035.htm#2)
int AddString( LPCTSTR lpszItem );
返回值: 表框中字符串的基于零的索引。如果出错,则返回LB_ERR;如果没有足够的有效空间存储新字符串,则为LB_ERRSPACE。
参数:lpszItem 指向将被添加的空终止字符串的指针。
说明:调用此成员函数添加一个字符串到列表框中。如果列表框未被创建为LBS_SORT风格,则字符串被添加到列表末尾。否则,字符串被插入到列表中,并把列表排序。如果列表被创建为LBS_SORT 风格而不是LBS_HASSTRINGS风格,则框架通过对CompareItem成员函数的一个或多个调用来排序列表。
(2)LPCTSTR类型(http://baike.soso.com/v7694572.htm?ch=ch.bk.innerlink)
如何理解LPCTSTR类型?
L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
P表示这是一个指针
C表示是一个常量
T表示在Win32环境中, 有一个_T宏
这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
STR表示这个变量是一个字符串
所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。
同样, LPCSTR就只能是一个ANSI字符串,在程序中我们大部分时间要使用带T的类型定义。
LPCTSTR == const TCHAR *
CString 和 LPCTSTR 可以说通用。 原因在于CString定义的自动类型转换,没什么奇特的,最简单的C++操作符重载而已。
常量字符串ansi和unicode的区分是由宏_T来决定的。但是用_T("abcd")时, 字符串"abcd"就会根据编译时的是否定一_UNICODE来决定是char* 还是 w_char*。 同样,TCHAR 也是相同目的字符宏。
相关文章推荐
- error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR”
- error C2664: “CWnd::SetDlgItemTextW”: 不能将参数 2 从“const char [2]”转换为“LPCTSTR”
- VS2010 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [3]”转换为“LPCTSTR”
- error C2664: “int CListCtrl::InsertColumn(int,LPCTSTR,int,int,int)”: 不能将参数 2 从“const char [9]”转换为“LP
- 【转载】C++编译出现 error C2664: 不能将参数 2 从“const char [5]”转换为“LPCTSTR”解决办法。
- error C2664: “CButton::Create”: 不能将参数 1 从“const char [5]”转换为“LPCTSTR”
- error C2664: “CButton::Create”: 不能将参数 1 从“const char [1]”转换为“LPCTSTR
- error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR”
- error C2664: “C****::XXXX”: 不能将参数 1 从“const char [7]”转换为“LPCTSTR”
- error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR
- error C2664: 不能将参数 1 从“const char [17]”转换为“LPCTSTR”
- C++编译出现 error C2664: 不能将参数 2 从“const char [5]”转换为“LPCTSTR”解决办法。
- error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [25]”转换为“LPCTSTR”
- error C2664: “BOOL CDC::TextOutW(int,int,const CString &)”: 不能将参数 3 从“const char [18]”转换为“const CString &”
- CWnd::MessageBoxW”: 不能将参数 1 从“const char [16]”转换为“LPCTSTR
- error C2664: “MessageBoxW”: 不能将参数 2 从“const char [10]”转换为“LPCWSTR”
- vs2010 不能将参数 2 从“const char [46]”转换为“LPCTSTR” 问题
- error C2664: “BOOL CDC::TextOutW(int,int,const CString &)”: 不能将参数 3 从“const char [18]”转换为“const CStr
- error C2664: “CreateMutexW”: 不能将参数 3 从“const char [8]”转换为“LPCWSTR”
- error C2664 无法将参数 从“const char []”转换为“LPCTSTR