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

像 score 这样的成员是指向实际数据的指针。例如one.score,是一个指向双精度的指针。当您想 cin 到双精度时,您至少应该取消引用指针:

cin >> *one.score

在您的 main() 示例中,您错过了分配数据实例。

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

最好的方法是避免指针访问数据,并使数据成为学生的成员。

于 2013-02-08T07:06:21.757 回答