【问题标题】:Using classes and string vectors together in C++?在 C++ 中一起使用类和字符串向量?
【发布时间】:2012-12-14 20:26:40
【问题描述】:

我只是 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];
 };

【问题讨论】:

  • 您真的希望您的成员变量成为字符串向量数组吗?
  • 很明显,您对某事感到非常困惑,并且可能对许多事情感到困惑。您是否会考虑购买一本关于该主题的书,并在您不那么困惑时再次尝试这个项目?

标签: c++ string class vector


【解决方案1】:

由于您正在制作 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 列表,因此请尝试在代码中将这两个概念分开。

【讨论】:

  • 谢谢。这有帮助,我没有考虑使用库函数。不过,我仍然对语法感到困惑。
  • 你在语法的哪一部分苦苦挣扎?
  • 哦,我刚刚发现字符串是字符数组 :\ 在我更改代码之前了解它会很有用。现在我无法让它工作。那好吧。我现在有太多不明白的地方要问。我会继续努力,当我遇到更多问题时可能会发布问题。谢谢您的帮助。 :)
【解决方案2】:

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

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

【讨论】:

  • 该程序要求至少 5 个条目,因为它将是一个 dvd 库。我已经让字符串类在我的编译器中工作,尽管从我所阅读的内容来看,向量是拥有可以添加/删除/编辑成员的数据的最佳方式,而这正是我的程序所需要的。编译器错误说'operator ='没有匹配
【解决方案3】:

先把这个去掉,你不用也不需要。您稍后将此实例保存的值设置为私有。同时删除受保护的关键字,您现在不保护任何内容。

//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);

【讨论】:

  • 如果我把它改回字符串,并像 dupersuper 建议的那样做,并且有一个库类,我能保留现在的 setter 吗?
猜你喜欢
  • 2019-08-09
  • 2022-01-16
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多