治疗男子无精:MFC的CString类的小问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/27 17:12:33
#include <iostream.h>
#include <afx.h>

int main()
{
CString str1="hahahaha";
str1[2]='a'; // str1.SetAt(2,'a');
cout<<str1[2]<<endl;
return 0;
}

这个程序不能调试通过:error C2106: '=' : left operand must be l-value
这是什么意思?CString类不是重载了=运算符吗?我给str1的第三个字符重新赋值怎么会出错啊。
但如果使用注释掉的语句则能正常运行。

是由于CString的操作符[]的返回值是常量
其定义如下:
TCHAR operator []( int nIndex ) const;
用SetAt成员函数可行

你在.net下编译的吧, 那里面会出错, 到VC++6.0里编译吧, 不会错,

我真不明白, 为什么要用慢又不好用的东东.

你的字符串中都没有第三个字符吧
str1.SetAt(1,'a')

你企图修改字符串常量,那能行么