成员变量在类方法内部被修改,但不在主方法中

问题描述 投票:-2回答:1

我有一个类“ Population”,它具有一个称为“个人”的“机器人”对象向量。在“人口”中,我有一个名为expandPop()的方法,该方法使用push_back()将Robot对象添加到个人。

如果我在方法末尾打印出个人,则表明我已经成功修改了个人。但是,当我主要使用此方法时,个人实际上并未对该人口对象进行修改。仅在方法内修改。

main.cpp:

Population afpo(Population& p, int numGens, int maxPSize){
    std::cout << "Expanded Pop: \n" << p << std::endl; //Prints 10 individuals

    p.expandPop(); //p's individuals is unchanged after this method call

    std::cout << "Expanded Pop: \n" << p << std::endl; //Should print out more individuals
    return p;
}

int main() {
    Population parents(10); //Population has 10 Robot objects stored in individual

    int gens = 50;

    parents = afpo(parents, gens, 10); //Runs an algorithm for 50 generations

}

Population类内部的方法expandPop():

Population::Population(int size){
    popSize = size;
    createIndividuals(popSize);
}

//Creates a population of robots
void Population::createIndividuals(int size){
    for(int i=0; i<size; i++){
        Robot r(i);
        individuals.push_back(r);
    }
}

void Population::expandPop(){
    Robot r = Robot();
    individuals.push_back(r)
    for (int i = 0; i < individuals.size(); i++){
        std::cout << individuals[i] << std::endl;  //Shows that individuals was modified
    }
}
c++ pointers reference getter-setter member-variables
1个回答
0
投票

对不起,我可能会误会,但是当您打印出个人时,您只打印出第一个元素

代替

std::cout << individuals << std::endl;  //Shows that individuals was modified

我认为您应该尝试

for (int i = 0; i < individuals.size(); i++){
    std::cout << individuals[i] << std::endl;  //Shows that individuals was modified
}
© www.soinside.com 2019 - 2024. All rights reserved.