2012-12-14 24 views
1

我只是C++的初學者,我試圖讓一些向量適用於我的程序,因爲我試圖編寫一個程序,允許用戶從文件中添加/編輯/刪除以前的條目。問題是我無法讓我的setter與vector一起工作。我不確定我到底做錯了什麼。在C++中一起使用類和字符串向量?

#include <iostream> 
#include <cstring> 
#include <vector> 
using namespace std; 

class DVD 
{ 
public: 
    //Default constructor 
    DVD(); 
    //Class members 
    vector<string> name[5]; 
    vector<string> length[5]; 
    vector<string> actora[5]; 
    vector<string> actorb[5]; 
    vector<string> year[5]; 
//Function to set and get DVD Name 
void setDVDname(vector<string> name) 
    { 
     DVDname[5]=name[5]; 
    } 
     vector<string> getDVDname() 
    { 
     return DVDname; 
    } 
//Function to set and get DVD length 
void setDVDlength(vector<string> length) 
    { 
     DVDlength=length; 
    } 
     vector<string> getDVDlength() 
    { 
     return DVDlength; 
    } 
//Function to get and get DVD year 
void setDVDyear(vector<string> year) 
    { 
     DVDyear=year; 
    } 
     vector<string> getDVDyear() 
    { 
     return DVDyear; 
    } 
//Function to get and set DVD Actor Alpha 
void setDVDactorA(vector<string> actora) 
    { 
     DVDactorA=actora; 
    } 
     vector<string> getDVDactorA() 
    { 
     return DVDactorA; 
    } 

//Function to get and set DVD Actor Bravo 
void setDVDactorB(vector<string> actorb) 
    { 
     DVDactorB=actorb; 
    } 
     vector<string> getDVDactorB() 
    { 
     return DVDactorB; 
    } 


protected: 
private: 
    //Variables to hold DVD information 
    vector<string> DVDname[5]; 
    vector<string> DVDlength[5]; 
    vector<string> DVDactorA[5]; 
    vector<string> DVDactorB[5]; 
    vector<string> DVDyear[5]; 
}; 
+4

你真的打算你的成員變量是一個字符串向量的陣列? –

+1

很明顯,你對某件事很困惑,可能還有很多事情。你會考慮購買一本關於這個主題的書,並且在你不太困惑的時候再次嘗試這個項目嗎? –

回答

0

你會得到任何編譯錯誤是邏輯嗎?

另外,你爲什麼使用矢量?由於它是一張DVD,並且您的矢量對應於信息,只需刪除矢量並將它們製作成簡單的字符串。

+0

該程序需要至少5個條目,因爲它將成爲一個DVD庫。我已經得到了字符串類在我的編譯器中工作,但是從我正在閱讀的內容來看,矢量是可以添加/刪除/編輯成員的數據的最佳方式,而這正是我需要的程序。編譯器錯誤表示沒有匹配'operator =' –

2

因爲你正在做一個DVD庫,你可以做這樣的事情:

class DVD { 
    std::string name; 
    // etc. 
}; 
std::vector<DVD> library; 

library變量將是可容納多達DVD作爲計算機的內存可以處理的DVD列表。使用std::vector的目的是不必擔心自己管理內存。您只需使用library.push_back()即可添加更多DVD。如果您想查看std::vector提供的其他方法,請查看cppreference.com

從邏輯上講,您希望您的DVD類僅代表DVD,而不是DVD或DVD的列表,因此請儘量將這兩個概念在代碼中分開。

+0

謝謝。這有幫助,我沒有考慮使用庫函數。儘管我仍然對語法感到困惑。 –

+0

你掙扎着什麼語法? – dupersuper

+0

哦,我剛剛發現字符串是字符數組:\在我更改我的代碼之前就知道這很有用。現在我無法實現它的工作。好吧。現在有太多我不明白的問題。我會繼續研究它,可能會在遇到更多問題時發佈問題。謝謝您的幫助。 :) –

0

首先刪除這個,你不使用它,你不需要它。您將此實例保存的值設置爲稍後保留。同時刪除受保護的關鍵字,你現在不保護任何東西。

//Class members 
    vector<string> name[5]; 
    vector<string> length[5]; 
    vector<string> actora[5]; 
    vector<string> actorb[5]; 
    vector<string> year[5]; 

第二上setDVDName()傳遞一個矢量中的一個副本,然後分配僅基本不存在的最後一部分,因爲你矢量具有5種元素和您請求的第六。如果你想要第五個元素,你應該改變它來命名[4]。

我假設你想要這樣的代替:DVDName = name; 此外,更改向量的聲明。 從

//Variables to hold DVD information 
vector<string> DVDname[5]; 
vector<string> DVDlength[5]; 
vector<string> DVDactorA[5]; 
vector<string> DVDactorB[5]; 
vector<string> DVDyear[5]; 

要:

//Variables to hold DVD information 
vector<string> DVDname(5); 
vector<string> DVDlength(5); 
vector<string> DVDactorA(5); 
vector<string> DVDactorB(5); 
vector<string> DVDyear(5); 
+0

如果我將它改回字符串而不是像dupersuper建議的那樣並且擁有一個庫類,那麼我現在能夠保持setter嗎? –

+0

是的@ dupersuper的解決方案也不錯。 – ipinak

相關問題