Ввод данных в структуру с указателями переменных-членов

У меня есть время, чтобы понять, что делать дальше здесь. По сути, эта программа не может использовать ничего, кроме указательных переменных (*) и динамически назначаемой памяти (например, «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);

0

Решение

Просто измените свою структуру, как показано ниже

struct student
{
string name;
double score, score2, average;
};

Согласно вашему примеру, они не должны быть указателями, так как Йоахим Пилеборг также точки из.

1

Другие решения

Вам нужно использовать оператор * разыменовать указатели. То есть,

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);

Однако вы должны помнить, чтобы сначала выделить память для этих указателей.

1

Члены, такие как счет, указывают на фактические данные. Например. one.score это указатель на двойник. Если вы хотите сделать cin на double, вы должны как минимум разыменовать указатель:

cin >> *one.score

В вашем примере main () вы пропустили выделение экземпляра данных.

one.score = new int;
cin >> *one.score

Наилучшим способом было бы избежать данных, к которым обращаются указатели, и делать данные членами учащегося.

0
По вопросам рекламы [email protected]