类vector没有成员

时间:2019-08-22 22:56:13

标签: c++ vector member

我正在收集姓名和测验分数以填充向量。函数和main方法都无法识别该结构的成员。我怎样才能看到会员?还是有更好的方法通过函数使用用户输入来填充结构向量?

我搜索了其他类似的帖子,但似乎只是我错过的一个简单的代码错误。

#include <iostream>
#include <vector>
using namespace std;

const int classSize = 1;

struct StudentType {
    string studentFName;
    string studentLName;
    int testScore;
    char grade;
};

vector<StudentType> collectStudentData(vector<StudentType> students[classSize]) {
    for (int i = 0; i < classSize; i++) {
        cout << "Student " << i << "'s name and test score" << endl;
        cin >> students[i].studentFName >> students[i].studentLName >> students[i].testScore;
    }
    return students[classSize];
};

int main() {
    vector<StudentType> students[classSize] = {};
    students[classSize] = collectStudentData(students);
    cout << students[1].studentFName << students[1].studentLName << students[1].studentFName;
};

'studentFName':不是'std :: vector>'

的成员

2 个答案:

答案 0 :(得分:3)

此行创建一个向量数组

vector<StudentType> students[classSize] = {};

您想要的是一个向量:

vector<StudentType> students;

被初始化为零长度数组的地方。

在添加数据时,您不需要从其他方法返回,则可以传递引用并将其添加到其中:

void collectStudentData(vector<StudentType>& students) {
  for (int i = 0; i < classSize; i++) {
    // Read in one at a time
    StudentType  student;
    cout << "Student " << i << "'s name and test score" << endl;
    cin >> student.studentFName >> student.studentLName >> student.testScore;

    // Add to the array
    students.push_back(student);
  }
}

理想情况下,classSize可以作为参数传递,也可以只键入空白行以结束输入。使用全局变量确实很麻烦,应强烈劝阻

答案 1 :(得分:2)

function searchByZipCode() {
  var sheetSample1 = SpreadsheetApp.getActiveSheet();
  var rangeAllZIPs = sheetSample1.getDataRange();
  var textFinderResults = rangeAllZIPs.createTextFinder("10550");
  var strCounties = textFinderResults.findAll().map(function(e) {return e.offset(0, -2).getValue()});
  strCounties.forEach(function (Item, Index)  {
    Logger.log("Counties \[" + Index + "\]\: " + Item);
  });
}

是一个问题。您并不是在声明要使用向量的函数,而是在声明要使用向量数组的函数。

第二,如果仅应用该更改,则将传递空向量,可以通过将大小传递给构造函数来将向量初始化为特定大小。

此外,通过参考传递学生向量,您似乎将从中受益

vector<StudentType> students[classSize]

而是使用&创建引用。现在,您的代码在将向量传递给函数时正在复制向量

vector<StudentType>& students

如果您想进一步改进代码,则可以在for循环中使用迭代器,并且最好不必在main中构造向量,并将其传递给函数进行变异。您可以构造它并从函数中返回它。