遇到一个比较奇异的错误

幻夢之葉 2014-05-08 10:00:52
error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const std::string' (or there is no acceptable conversion)

VS2008

奇异不在错误本身,而是我声明一个成员变量

//.h
std::string m_men;

//.cpp
std::string::size_type index = m_men.find_first_not_of(" ");
m_men = (std::string)m_men.substr(index); // C2678
//同
//std::string strTemp = (std::string)m_men.substr(index);
//m_men = strTemp; // C2678


这是什么原因造成的错误?如何会让string类型变化为const string?
...全文
177 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2014-05-08
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
string通常应该用来构造,而非用来强制类型转换。
是的,那个原本是没有用强制转换的,只是我出错后用做测试时写上去的!
赵4老师 2014-05-08
  • 打赏
  • 举报
回复
string通常应该用来构造,而非用来强制类型转换。
幻夢之葉 2014-05-08
  • 打赏
  • 举报
回复
引用 4 楼 idzeta 的回复:
你那个m_men所在的情况是不是像这样的?

void C::foo() const // 如果是这种情况,该方法中this会变为const C*类型的指针
{
    /* 假设m_men是C的成员变量 */
    m_men = strTemp; // 相当于static_cast<const C*>(this)->m_men = strTemp,自然出错
}
汗 = = 真心没注意是const修饰的函数 平时写const函数都是考虑到无修改非const成员的,今天是增加了某些东西,忽略了这个问题,以后要多多注意! 拜谢了
idzeta 2014-05-08
  • 打赏
  • 举报
回复
你那个m_men所在的情况是不是像这样的?

void C::foo() const // 如果是这种情况,该方法中this会变为const C*类型的指针
{
    /* 假设m_men是C的成员变量 */
    m_men = strTemp; // 相当于static_cast<const C*>(this)->m_men = strTemp,自然出错
}
幻夢之葉 2014-05-08
  • 打赏
  • 举报
回复
引用 2 楼 mujiok2003 的回复:
估计是临时变量在作祟。
按理说返回的子串不是const值吧?
mujiok2003 2014-05-08
  • 打赏
  • 举报
回复
估计是临时变量在作祟。
mujiok2003 2014-05-08
  • 打赏
  • 举报
回复
//m_men = (std::string)m_men.substr(index); // C2678
m_men = m_men.substr(index); // C2678
幻夢之葉 2014-05-08
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
string通常应该用来构造,而非用来强制类型转换。
感谢提点

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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