使用指针成员变量将数据输入到结构中

时间:2013-02-08 06:59:46

标签: c++ pointers struct cin dot-operator

我正忙着搞清楚接下来要做什么。基本上,该程序不能使用除指针变量(*)和动态分配的内存之外的任何内容(例如,“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);

3 个答案:

答案 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 :(得分:1)

只需按以下方式更改结构

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

根据你的例子,他们不需要成为指针,因为Joachim Pileborg也指向

答案 2 :(得分:0)

得分等成员是指向实际数据的指针。例如。 one.score是指向double的指针。当你想要切换到双重时,你应该至少取消指针:

cin >> *one.score

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

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

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