在C ++中一起使用类和字符串向量?

时间:2012-12-14 20:26:40

标签: c++ string class 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];
 };

3 个答案:

答案 0 :(得分:2)

由于你正在制作DVD库,你可以这样做:

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

library变量将是一个DVD列表,可以容纳与计算机内存可以处理的DVD数量相同的DVD。使用std::vector的目的是不必担心自己管理内存。您只需使用library.push_back()添加更多DVD。如果您想查看std::vector提供的其他方法,请查看cppreference.com

从逻辑上讲,您希望DVD类仅代表DVD,而不是DVD或DVD列表,因此请尽量将这两个概念分开代码。

答案 1 :(得分:0)

你得到任何编译错误是否符合逻辑?

另外,为什么要使用矢量?由于它是一张DVD而你的矢量对应于信息,只需删除矢量并使它们成为简单的字符串。

答案 2 :(得分: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个元素,你请求第6个。如果你想要第5个元素,你应该将它改为name [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);