没有运营商">>"匹配这些操作数的操作数类型是:std :: istream>>双*

时间:2017-12-08 03:04:19

标签: c++ pointers structure

我试图从结构中动态分配数组。我已经在stackoverflow上看了几个其他页面,并尝试了一些代码,但似乎没有一个适用于我的情况。我发现的最接近的是:

C++ dynamic memory allocation with arrays in a structure

出于某种原因,当我使用这行代码时:

cin >> testsPtr[i].students;

我在标题中收到错误。我也尝试过使用:

cin >> testsPtr[i]->students;

如何让用户输入我的程序数据?

以下是编程挑战的规范:

修改编程挑战1的程序以允许用户输入名称 - 分数对。对于每个参加考试的学生,用户键入一个表示学生姓名的字符串,后跟一个表示学生分数的整数。修改排序和平均计算功能,使它们采用结构数组,每个结构包含一个学生的名称和分数。在遍历数组时,使用指针而不是数组索引。

#include <iostream>
#include <iomanip>

using namespace std;


int main() {

void averageScore(double*, int);
void sort(double*, int);

int numScores;

struct studentScores {
    double *scores;
    string *students;
};


cout << "How many test scores will you be entering?" << endl;
cin >> numScores;

studentScores *testsPtr = new studentScores[numScores];

for (int i = 0; i < numScores; i++) {

    cout << "What is the #" << i + 1 << " students name?" << endl;
    cin >> testsPtr[i].students;
    for (int j = 0; j < numScores; j++) {

        cout << "Please enter test score #" << j + 1 << endl;

        do {
            cin >> testsPtr[j].scores;
            if (testsPtr[i].scores < 0) {
                cout << "A test score can't be less than 0. Re-enter test score #" << i + 1 << endl;
            }

        } while (testsPtr[i].scores < 0);
    }
}

cout << endl;

/*sort(testsPtr.scores, numScores);
cout << endl;

averageScore(testScores, numScores);
cout << endl;*/
for (int i = 0; i <= numScores; i++) {
    cout << testsPtr->students << " test scores are: " << endl;
    for (int j = 0; j <= numScores; j++) {
        cout << testsPtr->scores;
    }
}

delete[] testsPtr;
testsPtr = nullptr;


return 0;
}

2 个答案:

答案 0 :(得分:2)

您的问题的解决方法是将cin行更改为此cin >> *(testsPtr[i].students);这是因为testsPtr[i].students是指针,因此您必须使用deference指针。确保正确初始化成员。

希望这有帮助。

答案 1 :(得分:1)

在读取值之前取消引用指针:

cin >> *(testsPtr[i].students);

但在你必须创建对象string并引用它的指针之前:

testsPtr[i].students = new string;