0

ここで次に何をすべきかを考えるのに時間がかかっています。基本的に、このプログラムはポインタ変数(*)と動的に割り当てられたメモリ(例: "int *variable = new int")以外は使用できません。私は他のすべての上に構造を作成する必要があります !

以下にいくつかのコードを含めました。すべての cin ">>" 演算子の下に赤い線があり、「エラー: 演算子 ">>" がこれらのオペランドに一致しません」というメッセージが表示されます。コードの「one.score2」部分 (最後の行) の「one」の下に赤い線があり、「エラー: 式には整数型またはスコープ外の列挙型が必要です」というメッセージがあります。

コードを機能させるにはどうすればよいですか?

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

3 に答える 3

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

ただし、最初にこれらのポインターにメモリを割り当てることを忘れないでください。

于 2013-02-08T07:03:10.707 に答える
1

以下のように構造を変更するだけです

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

Joachim Pileborgも指摘しているように、あなたの例によると、それらはポインターである必要はありません。

于 2013-02-08T07:04:28.180 に答える
0

スコアのようなメンバーは、実際のデータへのポインターです。たとえばone.score、doubleへのポインタです。ダブルにシンしたいときは、少なくともポインターを参照解除する必要があります。

cin >> *one.score

main()の例では、データインスタンスの割り当てを逃しました。

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

最良の方法は、ポインターによってアクセスされるデータを避け、データを学生のメンバーにすることです。

于 2013-02-08T07:06:21.757 に答える