2013-02-08 4 views
0

У меня есть медведь времени, выясняя, что делать дальше. В принципе, эта программа не может использовать ничего, кроме переменных указателя (*) и динамически назначенной памяти (например, «int * variable = new int»). Я должен создать структуру поверх всего остального!Ввод данных в структуру с переменными-членами указателя

Я включил код ниже. Есть красные линии под всеми моими операторами «>>» и сообщение, в котором говорится: «Ошибка: нет оператора» >> «соответствует этим операндам». Также есть красная строка под моей «одной» частью «one.score2» кода (последняя строка) и сообщение, в котором говорится: «Ошибка: выражение должно иметь целочисленный или неперечисленный тип перечисления».

Как я могу заставить свой код работать?

#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); 
+1

Почему у вас есть члены в качестве указателей в структуре? Это звучит как надуманное домашнее задание. –

+2

Вы ответили на свой вопрос: «int * variable = new int» - где это в вашем коде? Фактически вы должны создать строку и удвоить один и два, прежде чем пытаться что-то прочитать в них. –

+0

Чтобы исправить вашу программу, вы захотите изучить: конструкторы, деструкторы, распределение динамической памяти и разыменование указателя. –

ответ

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

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

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

По вашему примеру, они не должны быть указатели, а Joachim Pileborg также точек из.

0

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

cin >> *one.score 

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

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

Лучший способ избежать доступа к данным с помощью указателей и сделать данные членами студента.

 Смежные вопросы

  • Нет связанных вопросов^_^