Kürzlich in meiner C++ - Klasse haben wir über Zeiger und Klassen gelernt.Klassenzeiger unitialisierte lokale Variable
Ich versuche ein Programm zu erstellen, das eine class Student
hat, die wir zeigen werden, um jedem Schüler einen Namen und Testergebnis zu geben.
Nachdem sowohl der Name als auch die Testergebnisse eingegeben wurden, werden sie sortiert und in der Reihenfolge von der höchsten zur niedrigsten aufgelistet.
Ich glaube, dass meine ganze Syntax korrekt ist, aber ich lerne immer noch. Das Problem, das ich habe, ist, dass ich beim ersten Mal, wenn ich meine Klasse benutze, einen nicht initialisierten lokalen Variablenfehler bekomme, jede Hilfe, wie ich das beheben kann?
struct Student {
double score;
std::string name;
};
Da die Accessoren absolut nichts zu tun:
#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);
}
}
}
}
Ihre 'Studenten' sind ein Zeiger auf' Student'. Machen Sie es zu einem Array, wenn Sie das 'count' mit' students = new Student [count]; 'kennen. –
Es gibt keine Notwendigkeit zu tun, "count = new int;" Erklären Sie es einfach als "int count"; – Sean
'count = new int;' - Sie oder Ihr Lehrer sind mit den Zeigeranforderungen über Bord gegangen, wenn Sie Code wie diesen schreiben. Außerdem haben sie nicht "löschen" gelehrt? – PaulMcKenzie