我如何为链表中的所有数字添加值?

时间:2016-03-14 03:36:46

标签: c++ pointers linked-list

因此,我无法理解函数的过程,该函数将传递给main中调用的方法的值,并将该值添加到已存储在节点变量中的链表中的所有数字。这个函数原型可能如下所示:

void IntegerListClass::AdjustNumbers(int changeValue);

其中,更改值是传递给调用的数字,并添加到链接列表中的所有数字。

我正在考虑这样的事情,但我在while循环中的等式左边得到一个错误,说该值需要是一个可修改的l值:

void IntegerListClass::AdjustNumbers(int changeValue)
{
    nodePtr current;

    current = start;

    while (current != NULL)
    {

        current = current->link;

        current->data.number + changeValue = current->data.number //error here

    }
}

4 个答案:

答案 0 :(得分:1)

您收到此错误是因为您出于某种原因写道:

current->data.number + changeValue = current->data.number;

错误的技术原因是添加产生了一个prvalue(current->data.number + changeValue的结果),您要为其分配旧值。这就是编译器抱怨左侧需要l-value的原因。 prvalues无法分配到。

value_category的相关部分:

  

prvalue(“纯rvalue”)表达式是一个没有标识且可以从中移出的表达式。   以下表达式是prvalue表达式:

     
      
  • a + b,a%b,a& b,a<< b,以及所有其他内置算术表达式;
  •   

  

右值

     

rvalue(“right value”)表达式是prvalue或xvalue的表达式。 [...]

     

属性(注意:这些也适用于预C ++ 11 rvalues):

     
      
  • rvalue不能用作内置赋值或复合赋值运算符的左手操作数。
  •   

也许你的意思是:

current->data.number += changeValue;

答案 1 :(得分:0)

一般情况下,如果您在链接列表上操作,您将在此表单中有一些内容(伪代码)。

currentNode = list.head

while (currentNode isn't null) {
  changeNode(currentNode)
  currentNode = currentNode.next
}

基本上,您需要通过在当前节点上执行操作然后转到下一个节点来迭代链接列表。因为你实现这个psydocode的确切方式取决于你如何实现你的类。

答案 2 :(得分:0)

我认为你的语法是错误的。这一行应该更像是:

 current->data.number  = current->data.number + changeValue

此外,您应该在移动到下一个节点之前更改数据:

void IntegerListClass::AdjustNumbers(int changeValue)
{
nodePtr current;

current = start;

while (current != NULL)
{


    current->data.number  = current->data.number + changeValue
    current = current->link;

}

答案 3 :(得分:0)

在此声明中:

// Using Apache HttpClient
HttpClient client = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build();
HttpGet request = new HttpGet(authUrl);
HttpResponse response = client.execute(request);
int responseCode = response.getStatusLine().getStatusCode();  //Returns 200

// Using java.net.HttpURLConnection
URL obj = new URL(authUrl);
HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
int responseCode = conn.getResponseCode();  //Returns 302

编译器告诉您current->data.number + changeValue = current->data.number 不是左值。也就是说,它没有引用内存中可修改的位置。实际上它被称为 rvalue ,这是一个临时结果。你也错过了分号。

要解决此问题,请将左值放在左侧,将右值放在右侧:

current->data.number + changeValue

C ++中的一个简写就是使用current->data.number = current->data.number + changeValue; 运算符。你的整个循环应该是这样的:

+=

您还可以使用for循环来获得更整洁的功能:

while (current != NULL)
{
    current->data.number += changeValue;
    current = current->link;
}