我正在使用VS 2012的MFC应用程序。在这个应用程序中,我想通过使用Trim()成员函数清理CString对象的容器。 首先,我使用了一个std::vector作为容器,如下面的MCVE所示:
#define _AFXDLL // CString #include <afx.h> // CString #include <vector> int main() { std::vector<CString> v; v.push_back(_T("Test")); v.begin()->Trim(); return 0; }
这个编译和按预期工作。 然后,我想用std::setreplacestd::vector 。 因此,我包含#include <set>而不是#include <vector>并更改了main() ,如下所示:
int main() { std::set<CString> s; s.insert(_T("Test")); s.begin()->Trim(); return 0; }
但是,这给了我下面的编译错误s.begin()->Trim(); 线:
错误C2663:'ATL :: CStringT >> :: Trim':3重载没有合法的转换'this'指针
C#ClickOnce安装文件夹 – Windows如何生成文件夹名称
debugging线程时无限循环
有关通过Windows安装程序安装应用程序的问题
正则expression式查找tasklist -v在窗口中输出的过程
错误的文档基本上说:
[…]这个错误可能是由调用一个const对象的非const成员函数引起的。 […]
但是,与vector版本相比,我没有添加任何const限定符。 另外, std::set::begin()提供了一个非常量迭代器,就像std::vector::begin()一样。 我在错误C2663上find类似的问题,例如这个 。 但是在大多数情况下,有人试图从const函数中修改一个成员,这在我的代码中并不是这样。
为什么我不能在std::set CString对象上使用Trim() ,我该如何解决这个问题?
如何获取窗口的位图对象在C + +的屏幕截图?
composer PHP – 无法在Windows上安装mongodb / mongodb
Windows操作系统中(软实时)时序要求的限制
sprintf一个LPCWSTRvariables
无法使用Go连接到MS sql Server
如何修剪存储在std :: set中的字符串?
你不能,你不应该。 std::set中的元素在内部排序。 如果你被允许改变他们,这将打破订单。
您最好的选择是从集合中删除现有的项目,并将修改后的项目添加到集合中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。