Я создаю программу катания на коньках для своего класса и сталкиваюсь с сообщениями об ошибках во время выполнения. Это происходит, когда компилятор пытается добавить производительность и технические оценки в функцию Judge. Буду признателен за любую помощь, и если какие-либо разъяснения необходимы, пожалуйста, дайте мне знать!
Изменить: сообщения об ошибках
«Исключение из первого шанса в 0x00FE4686 в IceSkating1.exe: 0xC0000005: расположение чтения нарушения доступа 0xCDCDCDD5. «and»Необработанное исключение в 0x00FE4686 в IceSkating1.exe: 0xC0000005: расположение чтения нарушения доступа 0xCDCDCDD5. «
#include <iostream>
#include <iomanip>
using namespace std;
typedef int *intptr;
class Judge
{
private:
int performance, technical, total = 0;
public:
void SetPerformance(int a) { performance = a; }
void SetTechnical(int a) { technical = a; }
void SetTotal() { total = performance + technical;} //EXCEPTION OCCURS HERE
int GetTotal() { return total; }
};
class Skater
{
private:
int ID;
Judge* judges;
int *ranks;
public:
void SetID()
{
int t;
cout << "Please enter skater ID: ";
cin >> t;
ID = t;
}
int GetID()
{
return ID;
}
void Judges(int qnty)
{
int p, t;
judges = new Judge[qnty];for (int count = 0; count < qnty; count++)
{
cout << "Please enter the peformance score from judge " << count + 1 << ":";
cin >> p;
while ((p > 6) || (p < 0))
{
cout << "Invalid score. Please enter a value between 0 - 6. \n";
cin >> p;
}
judges[qnty].SetPerformance(p);cout << "Please enter the technical score from judge " << count + 1 << ":";
cin >> t;
while ((t > 6) || (t < 0))
{
cout << "Invalid score. Please enter a value between 0 - 6. \n";
cin >> t;
}
judges[qnty].SetTechnical(t);
}
}
int GetJudgeTotal(int judgeqnty)
{
return judges[judgeqnty].GetTotal();
}
void SetRank(int judgeqnty, int rank)
{
ranks = new int[judgeqnty];
rank = ranks[judgeqnty];
}
int GetRank(int judgeqnty)
{
return ranks[judgeqnty];
}
};int main()
{
Skater* s;
int skaterqnty, judgeqnty;
cout << "Please enter number of contestants: ";
cin >> skaterqnty;
while ((skaterqnty > 24) || (skaterqnty < 0))
{
cout << "Please enter a valid amount. \n";
cin >> skaterqnty;
}
s = new Skater[skaterqnty];
for (int count = 0; count < skaterqnty; count++) {
s[count].SetID();
}cout << "Please enter odd number of judges: ";
cin >> judgeqnty;
if ((judgeqnty % 2) == 0 || (judgeqnty > 11))
{
cout << "Please enter valid number of judges. \n";
cin >> judgeqnty;
}
for (int count = 0; count < skaterqnty; count++)
{
cout << "Please enter scores for skater " << s[count].GetID() << ": \n";
s[skaterqnty].Judges(judgeqnty);
}
cout << s[0].GetJudgeTotal(0);
/*int jTotals[judgeqnty][skaterqnty];
for (int column = 0; column < skaterqnty; column++){
for (int row = 0; row < judgeqnty; row++){
jTotals[row][column] = s[column].JudgeTotal(judgeqnty);
}
}*/
cout << "---Beginning rank sort---\n";
for (int m = 0; m < judgeqnty; m++) {
int _rank = 1; cout << "---First level of loop\n";
for (int n = 0; n < skaterqnty; n++) { cout << "---Second level \n";
for (int p = 0; p < skaterqnty; p++) { cout << "---Third level \n";
if (s[n].GetJudgeTotal(m) < s[p].GetJudgeTotal(m))
{
_rank++;
cout << "Control statement completed\n";
}
} cout << "End third level\n";
s[n].SetRank(m, _rank); cout << "End second level\n";
} cout << "First level completed. \n";
}
for (int a = 0; a < skaterqnty; a++){
for (int b = 0; b < judgeqnty; b++)
{
cout << "Current Ranking:\nSkater " << s[a].GetID() << ":\t" << s[a].GetRank(b) << "\t";
}
}
cout << "\nDONE.";
}
Вы выделяете массив размера qnty
:
judges = new Judge[qnty];
а затем попробуйте получить доступ к qnty
-ый элемент:
judges[qnty].SetPerformance(p);
judges[qnty].SetTechnical(t);
Это неопределенное поведение (элементы пронумерованы от 0
в qnty-1
).
Ты хотел написать judges[count]
?
Вы обновили счет для неправильного судьи. Ты делаешь:
judges[qnty].SetPerformance(p);
Но вы делаете это в цикле, поэтому, вероятно, вы имели в виду:
judges[count].SetPerformance(p);