对象内的更新值不起作用

时间:2018-01-23 10:55:24

标签: c++

我从类中创建了一些对象,并将默认值设置为其属性。然后我将相同的对象属性值更改为不同的值。但是该更新在输出中对我不起作用。

(?=)

以上是主要的方法代码。通过第一个Container* container = TestValueInventor::getContainer(); container->print(); std::vector<ContainerEntry> cont_entry_vector = container->getContainerEntries(); for (vector<ContainerEntry>::iterator it = cont_entry_vector.begin(); it != cont_entry_vector.end(); it++) { it->updateAmount(6.0); } cout << "After the update...." << endl; container->print(); int pause; cin >> pause; return 0; ,它将显示默认值。然后在第二个print()之后应该打印更新的值。但它仍然显示默认值。我试图通过引用概念添加传递。但是不适用于此。

print()

上面的代码是主要方法中Container * TestValueInventor::getContainer(){ ContainerEntry row1; row1.setAmount(10); ContainerEntry row2; row2.setAmount(50); Container* container = new Container(); container->addContainerEntry(row1); container->addContainerEntry(row2); return container; } 静态方法的实现。

getContainer()

以上代码是在终端中打印输出。在main函数内部有两个打印函数,因为第一个是打印默认值,第二个是打印更新的值。两个输出都是相同的,这是客户端的问题。

void Container::print(){
 for (ContainerEntry &row : containerRecord) {
    cout << "value:- " << row.getAmount() <<  endl;
 }                                                                           
}

以上是std::vector<ContainerEntry> Container::getContainerEntries() { return this->containerRecord; } 方法的实现。

getContainerEntries()

以上是将默认金额更新为6.0。

然后最后它不会打印6.0而不是先前分配的默认值。那么我怎么能让它正确呢?

1 个答案:

答案 0 :(得分:5)

Container::getContainerEntries函数返回向量的副本。它应该返回引用

std::vector<ContainerEntry>& Container::getContainerEntries() { ... }

当然,您需要将其指定给参考,否则您需要再次复制:

std::vector<ContainerEntry>& cont_entry_vector = container->getContainerEntries();