{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
dc.GetTextMetrics(&tm);
if(13==nChar)
{
str_line.Empty();
m_point.y+=tm.tmHeight;
}
else if(8==nChar)
{
COLORREF clf=dc.SetTextColor(dc.GetBkColor());
dc.TextOutA(m_point.x,m_point.y,str_line);
str_line=str_line.Left(str_line.GetLength()-1);
dc.SetTextColor(clf);
}
else{
str_line += nChar;
}但编译总出现这个问题f:\program files\long2\long2\long2view.cpp(172): error C2593: “operator +=”不明确
15 个解决方案
#1
f:\program files\long2\long2\long2view.cpp(172): error C2593: “operator +=”不明确
中的long2view.cpp(172)是指哪一行?m_point.y+=tm.tmHeight;?str_line += nChar;?还有你的各种变量的类型是什么,比如m_point什么都没有说明确不好回答啊
中的long2view.cpp(172)是指哪一行?m_point.y+=tm.tmHeight;?str_line += nChar;?还有你的各种变量的类型是什么,比如m_point什么都没有说明确不好回答啊
#2
m_point.y是double
应该是str_line += nChar
一个是Cstring 一个是UINT(unsigned int)需要类型转换一下
要么吧CString转换为int 要么吧UINT转换为CString百度有方法
应该是str_line += nChar
一个是Cstring 一个是UINT(unsigned int)需要类型转换一下
要么吧CString转换为int 要么吧UINT转换为CString百度有方法
#3
强制类型转换一下把,估计是类型的问题
#4
学习中~ 除了强制转换还有没有其他方法啊
#5
str_line += nChar;
改成
str_line += (TCHAR)nChar;
或者
str_line.AppendChar(nChar);
改成
str_line += (TCHAR)nChar;
或者
str_line.AppendChar(nChar);
#6
CString操作符重载的问题,2和5楼说的很明确了
#7
楼主的编译环境是啥啊,如果在VC6.0下编译
str_line是Cstring nChar是UINT
那么str_line += nChar这句话是不会报错的。
例如: CString s = "12345";
UINT nchar = 0x36;
s += nchar;
会输出结果123456
str_line是Cstring nChar是UINT
那么str_line += nChar这句话是不会报错的。
例如: CString s = "12345";
UINT nchar = 0x36;
s += nchar;
会输出结果123456
#8
是在VS2010里面编译的,5楼说的那种方法都用过了,编译没问题,连接就弹出错误的框出来,主要那str_line+=nChar 那的问题。在VC6.0这样做成功没错,在那VS2010就不行,而且我在建MFC项目时把那Unicode那个选项的默认关掉了。
#9
这个问题解决了,如果创建的MFC项目的时候那个Unicode选项不关掉使用默认状态,并且在str_line+=(TCHAR)nChar;那里加个强制转换,就一切没问题了,编译连接都可以。但如果创项目是把Unicode选项关掉,一样使用强制转换时,编译没错,连接的时候就出现那个弹出的BUG框,谁能帮忙解释下这其中的缘由。
#10
连接是报什么错?
dc.TextOutA(m_point.x,m_point.y,str_line);
BOOL TextOut(
int x,
int y,
const CString& str
);
这个A表示明确为多字节码。而你的str_line是CString,根据unicode设置对应W或A。为什么你关闭Unicode返回会出错呢?
#11
在关掉unicode后只可以打出TextOutA,没关掉unicode只可以打出TextOutW而且只有这样改变才会不出错。难道编译这个程序就不能关掉Unicode吗?真的时奇怪。出错也不是什么程序出错,再弹出EXE框之前,弹出个BUG框。
#12
用unicode这个选项,为什么不用TextOut这个函数呢?而要用特指的W A版本?
#13
++
#14
#15
在VS2010中不存在TextOut函数,只存在那个带A或W的,把那个UNICODE打开就显示W的不打开UNICODE就显示A的,而问题是,只有把UNICODE打开才能成功。
#1
f:\program files\long2\long2\long2view.cpp(172): error C2593: “operator +=”不明确
中的long2view.cpp(172)是指哪一行?m_point.y+=tm.tmHeight;?str_line += nChar;?还有你的各种变量的类型是什么,比如m_point什么都没有说明确不好回答啊
中的long2view.cpp(172)是指哪一行?m_point.y+=tm.tmHeight;?str_line += nChar;?还有你的各种变量的类型是什么,比如m_point什么都没有说明确不好回答啊
#2
m_point.y是double
应该是str_line += nChar
一个是Cstring 一个是UINT(unsigned int)需要类型转换一下
要么吧CString转换为int 要么吧UINT转换为CString百度有方法
应该是str_line += nChar
一个是Cstring 一个是UINT(unsigned int)需要类型转换一下
要么吧CString转换为int 要么吧UINT转换为CString百度有方法
#3
强制类型转换一下把,估计是类型的问题
#4
学习中~ 除了强制转换还有没有其他方法啊
#5
str_line += nChar;
改成
str_line += (TCHAR)nChar;
或者
str_line.AppendChar(nChar);
改成
str_line += (TCHAR)nChar;
或者
str_line.AppendChar(nChar);
#6
CString操作符重载的问题,2和5楼说的很明确了
#7
楼主的编译环境是啥啊,如果在VC6.0下编译
str_line是Cstring nChar是UINT
那么str_line += nChar这句话是不会报错的。
例如: CString s = "12345";
UINT nchar = 0x36;
s += nchar;
会输出结果123456
str_line是Cstring nChar是UINT
那么str_line += nChar这句话是不会报错的。
例如: CString s = "12345";
UINT nchar = 0x36;
s += nchar;
会输出结果123456
#8
是在VS2010里面编译的,5楼说的那种方法都用过了,编译没问题,连接就弹出错误的框出来,主要那str_line+=nChar 那的问题。在VC6.0这样做成功没错,在那VS2010就不行,而且我在建MFC项目时把那Unicode那个选项的默认关掉了。
#9
这个问题解决了,如果创建的MFC项目的时候那个Unicode选项不关掉使用默认状态,并且在str_line+=(TCHAR)nChar;那里加个强制转换,就一切没问题了,编译连接都可以。但如果创项目是把Unicode选项关掉,一样使用强制转换时,编译没错,连接的时候就出现那个弹出的BUG框,谁能帮忙解释下这其中的缘由。
#10
连接是报什么错?
dc.TextOutA(m_point.x,m_point.y,str_line);
BOOL TextOut(
int x,
int y,
const CString& str
);
这个A表示明确为多字节码。而你的str_line是CString,根据unicode设置对应W或A。为什么你关闭Unicode返回会出错呢?
#11
在关掉unicode后只可以打出TextOutA,没关掉unicode只可以打出TextOutW而且只有这样改变才会不出错。难道编译这个程序就不能关掉Unicode吗?真的时奇怪。出错也不是什么程序出错,再弹出EXE框之前,弹出个BUG框。
#12
用unicode这个选项,为什么不用TextOut这个函数呢?而要用特指的W A版本?
#13
++
#14
#15
在VS2010中不存在TextOut函数,只存在那个带A或W的,把那个UNICODE打开就显示W的不打开UNICODE就显示A的,而问题是,只有把UNICODE打开才能成功。