2011-12-01 25 views
1

我有一個我通過讀取數據文件在主中創建的類對象的向量。然後,我將向量傳遞給幾個不同的文件,這些文件包含對向量執行不同操作的函數(按不同字段排序,減去庫存等)。當我嘗試使用push_back添加到另一個文件(這是同一項目的一部分)中的矢量後,我遇到了問題,因爲它已被創建。預先存在的矢量被傳遞給函數,矢量被成功添加到函數中,但是當我退出函數時,添加的記錄不再存在,並且據我所知,我應該訪問更新的之後的矢量點從我的所有不同的功能轉移到不同的文件中吧?如果它與我在main中創建的名稱相同,我不應該將更新後的向量傳遞回去,對嗎?我敢肯定,我使用的語言和術語是錯誤的(請隨時糾正我),但它幾乎就好像向量沒有全局更新一樣,只是在函數調用期間本地更新。在各種函數中使用push_back更新類對象的向量

這是函數定義和我正在使用的函數中我想添加到向量中的代碼(爲了簡潔起見,我正在跳過所有可變參數賦值)。我指向的所有函數都是類中的setter函數,在此之前,vector已經包含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); 
} 

我不想淹沒了太多的代碼後,但我可以發佈更多,如果這將會是有益的。我只想在整個程序中添加(或者在其他函數中刪除)。

+3

注意:你已經聲明瞭一個BookData值的向量 - 沒有必要使用'new'(它也是如此泄漏)。只需聲明如下:'BookData books1;'(不需要'new')並使用'.'而不是' - >'進行訪問,然後在使用'books.push_back(books1);'時追加。 – justin

+0

非常真實,謝謝! –

回答

5

您應該通過引用傳遞向量來修改原始全局向量。

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

否則你逝去的原始載體的拷貝的功能和修改,並非全球版本。

+0

非常感謝您的幫助!這很簡單,我應該意識到這一點! –

2

只要有需要,您需要傳遞您的向量作爲參考。在這種特定的實例,你只需要改變

void addBook(vector<BookData> books) 

到:

void addBook(vector<BookData>& books) 

否則你的函數獲取矢量,而不是原來的一個參考的副本

+0

太好了,非常感謝! –