关于 error C2664 在线等 请高手进啊

超gogo 2009-05-31 08:46:47

//定义了三个编辑框控件 接受num1 num2 num3

void CTestDlg::OnBnClickedButton1() //响应按钮 add
{
// TODO: 在此添加控件通知处理程序代码
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
GetDlgItem(IDC_EDIT1)->GetWindowTextW(ch1,10);
GetDlgItem(IDC_EDIT2)->GetWindowTextW(ch2,10);

num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;

itoa(num3,ch3,10);

GetDlgItem(IDC_EDIT3)->SetWindowTextW(ch3);//当计算好num1+num2 显示在第三个编辑框控件中

}


出现错误
f:\visual studio 2008\projects\mydialog\mydialog\testdlg.cpp(75) : error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LPTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>f:\visual studio 2008\projects\mydialog\mydialog\testdlg.cpp(76) : error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LPTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>f:\visual studio 2008\projects\mydialog\mydialog\testdlg.cpp(84) : error C2664: “CWnd::SetWindowTextW”: 不能将参数 1 从“char [10]”转换为“LPCTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换



以前遇到这种问题一直是在问题处加 _T() 就行
但是这里加就会发出错误
f:\visual studio 2008\projects\mydialog\mydialog\testdlg.cpp(75) : error C2065: “Lch1”: 未声明的标识符

1.在以前的书上都是用的GetWindowText 现在的好多函数都加W 这是为什么呢??
2.还有加_T是什么意思啊???
3.帮忙解决上面的错误


谢谢 请各位积极发言!!!!!!!!
...全文
2156 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsyplan 2012-07-18
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]

引用 18 楼 WaistCoat17 的回复:
C/C++ codevoidCTestDlg::OnBnClickedButton1()//响应按钮 add{//TODO: 在此添加控件通知处理程序代码intnum1,num2,num3;
CString str1, str2, str3;
GetDlgItem(IDC_EDIT1)->GetWindowText(str1);
GetD……
[/Quote]

编译通过
New_slacker 2012-05-03
  • 打赏
  • 举报
回复
很有用,谢谢各位高手
guoln1010 2011-11-04
  • 打赏
  • 举报
回复
没看明白,我只要遇到char, char*,LTSTR类似这样的类型转换就犯晕
zhangdanshaniu 2010-11-08
  • 打赏
  • 举报
回复
我也遇到这样的错误了,嘿嘿谢谢各位,学习了!!
MCADEx 2010-07-22
  • 打赏
  • 举报
回复
lin的方法很好,我的一改就成功了,非常感谢撒!
jayxbja 2010-06-03
  • 打赏
  • 举报
回复
hhaa,楼主在用孙鑫的MFC吧。。我也刚刚碰到
meiliingrui 2010-03-15
  • 打赏
  • 举报
回复
学到很多,谢谢……
超gogo 2009-05-31
  • 打赏
  • 举报
回复
再次感谢各位!!!!!
超gogo 2009-05-31
  • 打赏
  • 举报
回复
22楼改后的可以用
WaistCoat17 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wangtengchao 的回复:]
C/C++ codeintnum1,num2,num3;
WCHAR ch1[10],ch2[10],ch3[10];//这里用WCHARGetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);

num1=_wtoi(ch1);//这里用_wtoinum2=_wtoi(ch2);
num3=num1+num2;

_itow(num3,ch3,10);//这里改成_itow可以GetDlgItem(IDC_EDIT3)->SetWindowText((LPTSTR)ch3);

改成上面的可以用  但是会出现警告
warning C4996: '_itow': …
[/Quote]

这个警告没关系,也可以用_itow_s

_itow_s(num3,ch3,10, 10);
WaistCoat17 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wangtengchao 的回复:]
18楼的灰出现错误
error C2664: “_itoa”: 不能将参数 2 从“TCHAR *”转换为“char *”

本人用的是VS2008
[/Quote]

_itoa->_itot
WaistCoat17 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 WaistCoat17 的回复:]
C/C++ codevoidCTestDlg::OnBnClickedButton1()//响应按钮 add{//TODO: 在此添加控件通知处理程序代码intnum1,num2,num3;
CString str1, str2, str3;
GetDlgItem(IDC_EDIT1)->GetWindowText(str1);
GetDlgItem(IDC_EDIT2)->GetWindowText(ch2);

num1=_ttoi((LPCTSTR)str1);
num2=_ttoi((LPCTSTR)str2);
num3=num1+num2;

_itot(num3,(TCHAR*)str3.GetBuffer(10),10);
str3.ReleaseBuffer();

GetDlgItem(IDC_EDIT3)->SetWindowText(str3);//当计算好num1+num2 显示在第三个编辑框控件中

[/Quote]
超gogo 2009-05-31
  • 打赏
  • 举报
回复
18楼的灰出现错误
error C2664: “_itoa”: 不能将参数 2 从“TCHAR *”转换为“char *”

本人用的是VS2008
doudouHuY 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wangtengchao 的回复:]
说错了 11楼的方法和一楼的不一样
这个和13楼的错误一样
不过仍会得到错误
error C2664: “_itoa”: 不能将参数 2 从“TCHAR [10]”转换为“char *”
[/Quote]

因为你工程选项里头是Unicode字符集,你用CString后自动转为PXSTR,别用atoi itoa之类的函数,而是用带t的函数_ttoi _itot_s等来转
WaistCoat17 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wangtengchao 的回复:]
说错了 11楼的方法和一楼的不一样
这个和13楼的错误一样
不过仍会得到错误
error C2664: “_itoa”: 不能将参数 2 从“TCHAR [10]”转换为“char *”
[/Quote]

void CTestDlg::OnBnClickedButton1()   //响应按钮 add
{
// TODO: 在此添加控件通知处理程序代码
int num1,num2,num3;
TCHAR ch1[10],ch2[10],ch3[10];
GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);

num1=_ttoi(ch1);
num2=_ttoi(ch2);
num3=num1+num2;

_itot(num3,ch3,10);

GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);//当计算好num1+num2 显示在第三个编辑框控件中

}
WaistCoat17 2009-05-31
  • 打赏
  • 举报
回复
void CTestDlg::OnBnClickedButton1()   //响应按钮 add
{
// TODO: 在此添加控件通知处理程序代码
int num1,num2,num3;
CString str1, str2, str3;
GetDlgItem(IDC_EDIT1)->GetWindowText(str1);
GetDlgItem(IDC_EDIT2)->GetWindowText(ch2);

num1=_ttoi((LPCTSTR)str1);
num2=_ttoi((LPCTSTR)str2);
num3=num1+num2;

_itoa(num3,(TCHAR*)str3.GetBuffer(10),10);
str3.ReleaseBuffer();

GetDlgItem(IDC_EDIT3)->SetWindowText(str3);//当计算好num1+num2 显示在第三个编辑框控件中

}
超gogo 2009-05-31
  • 打赏
  • 举报
回复

int num1,num2,num3;
WCHAR ch1[10],ch2[10],ch3[10]; //这里用WCHAR


GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);

num1=_wtoi(ch1); //这里用_wtoi
num2=_wtoi(ch2);
num3=num1+num2;

_itow(num3,ch3,10); //这里改成_itow可以

GetDlgItem(IDC_EDIT3)->SetWindowText((LPTSTR)ch3);


改成上面的可以用 但是会出现警告
warning C4996: '_itow': This function or variable may be unsafe. Consider using _itow_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\program files\microsoft visual studio 9.0\vc\include\wchar.h(878) : 参见“_itow”的声明
Lin 2009-05-31
  • 打赏
  • 举报
回复
彻底晕老,俺从此闭嘴................

不知道你使用的啥编译器。
超gogo 2009-05-31
  • 打赏
  • 举报
回复
说错了 11楼的方法和一楼的不一样
这个和13楼的错误一样
不过仍会得到错误
error C2664: “_itoa”: 不能将参数 2 从“TCHAR [10]”转换为“char *”
超gogo 2009-05-31
  • 打赏
  • 举报
回复
10楼的会出现这个错误:
error C2664: “atoi”: 不能将参数 1 从“CString”转换为“const char *”

11楼和1楼的方法一样 都不可以实现
会出现错误:
atoi”: 不能将参数 1 从“TCHAR [10]”转换为“const char *”
加载更多回复(13)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧