最近私のC++クラスでは、ポインタとクラスについて学習しました。クラスポインタのユニット化ローカル変数
私はclass Student
のプログラムを作ろうとしています。これは、各生徒に名前とテストのスコアを与えることを指します。
名前とテストスコアの両方を入力した後、ソートされ、次に高い順に並べられます。
私はすべての構文が正しいと信じていますが、私はまだ学んでいます。私が抱えている問題は、初めてクラスを使用するときに、初期化されていないローカル変数エラーが発生することです。
#include "stdafx.h"
#include <iostream>
#include <string>
#include <array>
using namespace std;
class Student {
private:
double score;
string name;
public:
void setScore(double a) {
score = a;
}
double getScore() {
return score;
}
void setName(string b) {
name = b;
}
string getName() {
return name;
}
};
void sorting(Student*, int);
int main()
{
Student *students;
string name;
int score;
int *count;
count = new int;
cout << "How many students? ";
cin >> *count;
while (*count <= 0) {
cout << "ERROR: The number of students must be greater than 0.\n";
cin >> *count;
}
for (int i = 0; i < *count; i++) {
cout << "Please enter the students name: ";
cin >> name;
students[i].setName(name);
cout << "Please enter " << students[i].getName() << "'s score: ";
cin >> score;
while (score < 0) {
cout << "ERROR: Score must be a positive number.\n";
cin >> score;
}
students[i].setScore(score);
}
sorting(students, *count);
for (int i = 0; i < *count; i++) {
cout << students[i].getName() << ": " << students[i].getScore() << endl;
}
system("PAUSE");
return 0;
}
void sorting(Student *s, int size) {
for (int i = 0; i < size; i++) {
for (int j = i; j < size; j++) {
if (s[j].getScore() > s[(j + 1)].getScore()) {
int tmp = s[(j + 1)].getScore();
s[(j + 1)].setScore(s[j].getScore());
s[j].setScore(tmp);
string tmp1 = s[(j + 1)].getName();
s[(j + 1)].setName(s[j].getName());
s[j].setName(tmp1);
}
}
}
}
あなたの 'students'は' Student'へのポインタです。 'students = new Student [count];'を使って 'count'を知ったら配列にしてください。 –
'count = new int;'を実行する必要はありません。単に 'int count'と宣言してください。 – Sean
'count = new int;' - このようなコードを書くと、あなたやあなたの先生がポインタの必要条件を使いこなしてしまいました。また、彼らは 'delete'を教えていませんでしたか? – PaulMcKenzie