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 のリストになります。を使用する目的は、std::vector自分でメモリを管理することを心配する必要がないようにすることです。library.push_back()DVDを追加するだけです。提供されている他のメソッドを確認したい場合は、 cppreference.comstd::vectorをチェックしてください。

論理的には、DVD クラスは DVD のライブラリやリストではなく、DVD のみを表す必要があるため、コード内で 2 つの概念を分離するようにしてください。

于 2012-12-14T20:45:05.600 に答える
0

最初にこれを削除します。使用せず、必要ありません。このインスタンスが保持する値は、後でプライベートとして設定します。また、保護されたキーワードを削除します。現在は何も保護していません。

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

次に、setDVDName()で、ベクターのコピーを1つ渡し、ベクターに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 に答える
0

コンパイルエラーが発生しますか?それは論理的ですか?

また、なぜベクターを使用するのですか? これは 1 つの DVD であり、ベクトルは情報に対応しているため、ベクトルを削除して単純な文字列にします。

于 2012-12-14T20:34:17.713 に答える