在 C++ 中更新基于 for 循环的范围内的类成员值

问题描述

上面的代码有效。它下面的代码没有。为什么?

我正在使用对象的名称成员在 C++ 中搜索类对象的向量,以增加它的监视成员。常规 for 循环和语法成功地增加了成员。但是,我尝试使用我认为是基于范围的 for 循环的正确语法来做同样的事情是不成功的。使其成功的正确语法是什么?

#include <stdio.h>
#include <stdlib.h>

// Function Prototype..
void totSchol(float total [],float *aPointer);

int main(void)
{
    // Declare Local Variables..
    int i;
    float amt[5]={0},tot;
    //points to the array variable.
    float *aPointer = &amt[0];
    //prompts AYTB Bank..
    printf("\t\t AYTB Bank\n");
    for (i=0; i<5; i++)
    {
        //prompts to enter scholarship amount for 5 students..
        printf("Student %d,Enter scholarship amount: ",i+1);
        //takes value entered and store in pointer variable aPointer & increment by i..
        scanf("%f",aPointer + i);
        tot += aPointer;
    }

    totSchol(amt,aPointer);
    
    return 0;
}


void totSchol(float total [],float *aPointer)
{
    int x;
    float year3;
    
    for (x=0; x < 5; x++)
    {
        
        printf("\nThe total amount for each studetn is: %.2f",(aPointer + x));
        year = (aPointer +x) * 3;
        printf("\nThe total amount for each studetn after 3 years is: %.2f",year3);
        
    }
}

顺便说一句,如果有区别,这些循环在一个方法内部,该方法与向量一起是向量中对象类的友元类的成员。而且我也已经尝试过 ++m.watched;和 ++(m.watched);没有成功。谢谢

解决方法

您的循环每次迭代都会将元素复制到 m 中。您对 m 的更改将针对该副本。使 m 成为对容器中元素的引用:

     for(auto& m : mList)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...