在各种函数中使用push_back更新类对象的向量

时间:2011-12-01 06:44:44

标签: c++ class vector push-back

我有一个类对象的向量,我通过读取数据文件在main中创建。然后我将向量传递给几个不同的文件,这些文件包含对向量执行不同操作的函数(按不同字段排序,减去库存等)。当我尝试使用push_back添加到另一个文件中的向量(它是同一个项目的一部分)后,我遇到了问题。预先存在的向量传递给函数,向量成功添加到函数内,但是当我退出函数时,添加的记录不再存在,据我所知,我应该访问更新的向后转向我不同文件中的所有不同功能,对吗?如果它与我在main中创建的名称相同,我不应该将更新后的矢量传回去,我应该吗?我确定我使用的语言和术语是错误的(请随意纠正我),但它几乎就像向量不是全局更新而只是更新在函数内部在其调用期间。

这是我想要添加到向量的函数中的函数定义和代码(为了简洁起见,我跳过所有变量参数赋值)。我指向的所有函数都是类中的setter函数,在此之前,向量已经包含20个记录,并且设置与下面的函数类似。

void addBook(vector<BookData> books)
{
    BookData *books1;
    books1 = new BookData;
    books1->setTitle(bookTitle);
    books1->setAuthor(author);
    books1->setPub(publisher);
    books1->setIsbn(isbn);
    books1->setWholesale(wholesale);
    books1->setRetail(retail);
    books1->setQty(qtyOnHand);
    books1->setDateAdded(dateAdded);
    books.push_back(*books1);
}

我不想用太多的代码充斥帖子,但如果它有用,我可以发帖更多。我只想在整个程序中访问添加(或我在另一个函数中删除)。

2 个答案:

答案 0 :(得分:5)

您应该通过引用传递向量来修改原始全局向量。

void addBook(vector<BookData>& books)
                            ^^^

否则,您将原始矢量的副本传递给函数并修改而不是全局版本。

答案 1 :(得分:2)

您需要在必要时将矢量作为参考传递。在该特定实例中,您只需要更改

void addBook(vector<BookData> books)

为:

void addBook(vector<BookData>& books)

否则你的函数会获得向量的副本,而不是对原始函数的引用。