【问题标题】:lvalue required as left operand of assignment? Looking at other threads hasn't helped [closed]左值需要作为赋值的左操作数?查看其他线程没有帮助[关闭]
【发布时间】:2013-09-23 06:44:16
【问题描述】:
for (i = 0 ;  i >= 0 ; i++)
{
    (j-1) = text.find("." , j) ;
    letter = static_cast <int> ( text.at(j+1) ) ;
    if (( letter < 123 ) && ( letter > 96 ))
    {
        letter = (letter - 32) ;
        letter = text.at(j+1) ;
        if ((text.find("." , j) < 0))
        {
            j = 0 ;
            break ;
        }

这是我目前拥有的代码,通过反复试验,我得出结论,这是问题部分。标题中列出了不断发生的问题。任何人都可以伸出援助之手吗?谢谢。

【问题讨论】:

  • (j-1) = text.find("." , j) ; ?顺便说一句,请格式化您的代码..
  • 这里有问题:(j-1) = ...
  • 是的,我应该提到这一点,我的错。
  • 你认为(j-1) =是什么意思?
  • 您尝试在某个地方分配右值,可能是临时的。

标签: c++ assignment-operator


【解决方案1】:

你写道:

(j-1) = text.find("." , j) ;

您不能为j-i 赋值。如果你想设置j 的值,使j-1 等于你必须在赋值两边加上+1:

j = text.find("." , j) + 1;

【讨论】:

  • 那行得通,我目前不熟悉语法的复杂性。我只是假设它们是相同的(从数学上讲它们基本上是)
  • @user2779581 C++ 编程不是数学。变量赋值不是定义数学等价,而是将值移动到槽中。 (j-1) 不是插槽,所以你不能在那里移动任何东西。
  • 不幸的是,= 在 C++ 中的含义与在数学中的含义不同:它不是表示相等,而是表示变量赋值。比如你可以写j = 1; j = 2;,这并不矛盾;它只是先将变量j 的值设置为1,然后设置为2。这就是为什么(j-1)=something 可能是非法的:j-1 不是变量(技术上是“左值”),它的值只能计算,未设置。
猜你喜欢
  • 2011-09-03
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多