私はかなり混乱しています。私には、次の2つの実装は有効だと思います(ただし、構文にエラーがあります)が、どちらも機能させることができません。これは1年目のC++イントロクラスの宿題です。Vectorを使用することはできません(そうでなければ、ずっと前に行われます...)
すでにクラスを終了Student
しましたが、n人の生徒を格納するためのコンテナを作成する必要があります。私は次の2つのオプションを考えていました。
1)学生オブジェクトの配列を作成します。Student arrayOfStudents[20];
私の生徒のクラスはとてもシンプルです(行が多すぎるため、変更が異なります)。でもアイデアはこんな感じ…
class Student
{
public:
// Constructor for the Book class, take 6 arguments
Student(string myUID, string myLastName, string myFirstName,
string major, string age, string homeState, bool isWorking);
...
};
しかし、生徒の配列を作成しようとすると、このエラーメッセージが表示されます。
cs114p2main.cpp: In function ‘int main(int, char**)’:
cs114p2main.cpp:103: error: no matching function for call to ‘Student::Student()’
cs114p2Student.h:14: note: candidates are: Student::Student(std::string*)
cs114p2Student.h:11: note: Student::Student(std::string, std::string, std::string, std::string, std::string, bool)
cs114p2Student.h:7: note: Student::Student(const Student&)
2)また試してみました:各生徒を指す生徒ポインタの配列を作成します。
Student* ArrayOfStudents = Student[20];
私の質問は、なぜ方法1が機能しないのですか?そして、この場合、ポインターを使用する必要がありますか(メソッド2の行に沿ったもの)。
この配列を、各生徒を設定する関数に渡す必要があるためです。(何人の学生がそこに行くのかわかりません)。それで、それは私が学生の配列へのポインタを渡さなければならないことを意味しますか?その場合、方法1が機能することを本当に望んでいますが、学生ポインターの配列へのポインターを処理することは想像できません。の配列を返してdata[numOfData][numOfStudnet]
、メインで実行する必要があると思っていましたが、どちらにしても、なぜこれでエラーが発生するのかを理解したいと思います。ありがとうございます。
編集:次の質問:調査を通じて、の配列のサイズをStudent
パラメーターとして宣言する必要があることはわかっていますが、実行後にサイズしかわからない場合はどうなりますか?その場合、私の選択肢は何ですか?