1

我只是 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

3 回答 3

2

由于您正在制作 DVD 库,因此您可以执行以下操作:

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

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

从逻辑上讲,您希望您的 DVD 类仅表示 DVD,而不是库或 DVD 列表,因此请尝试在代码中将这两个概念分开。

于 2012-12-14T20:45:05.600 回答
0

你得到任何编译错误是合乎逻辑的吗?

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

于 2012-12-14T20:34:17.713 回答
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);
于 2012-12-14T20:50:50.593 回答