У меня есть время, чтобы понять, что делать дальше здесь. По сути, эта программа не может использовать ничего, кроме указательных переменных (*) и динамически назначаемой памяти (например, «int * variable = new int»). Я должен создать структуру поверх всего остального!
Я включил код ниже. Под всеми моими операторами cin «>>» есть красные линии и сообщение «Ошибка: нет оператора» >> «соответствует этим операндам». Есть также красная линия под моим «one» в части «one.score2» кода (последняя строка) и сообщение «Ошибка: выражение должно иметь целочисленный или незавершенный тип enum».
Как я могу заставить мой код работать?
#include <iostream>
#include <string>
using namespace std;
// Define structures
struct student
{
string *name;
double *score, *score2, *average;
};
void main(void)
{
// Create our students
student one, two;
cout << "Enter the first student's name: ";
cin >> one.name;
cout << endl << "Enter " << one.name << "'s first exam: ";
cin >> one.score;
cout << endl << "Enter " << one.name << "'s second exam: ";
cin >> one.score2;
one.average = ((one.score + one.score2) / 2);
Просто измените свою структуру, как показано ниже
struct student
{
string name;
double score, score2, average;
};
Согласно вашему примеру, они не должны быть указателями, так как Йоахим Пилеборг также точки из.
Вам нужно использовать оператор *
разыменовать указатели. То есть,
cout << "Enter the first student's name: ";
cin >> *one.name;
cout << endl << "Enter " << *one.name << "'s first exam: ";
cin >> *one.score;
cout << endl << "Enter " << *one.name << "'s second exam: ";
cin >> *one.score2;
*one.average = ((*one.score + *one.score2) / 2);
Однако вы должны помнить, чтобы сначала выделить память для этих указателей.
Члены, такие как счет, указывают на фактические данные. Например. one.score
это указатель на двойник. Если вы хотите сделать cin на double, вы должны как минимум разыменовать указатель:
cin >> *one.score
В вашем примере main () вы пропустили выделение экземпляра данных.
one.score = new int;
cin >> *one.score
Наилучшим способом было бы избежать данных, к которым обращаются указатели, и делать данные членами учащегося.