Class 向量没有成员
Class vector has no 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>'
的成员
此行创建一个向量数组:
vector<StudentType> students[classSize] = {};
你想要的是单个向量:
vector<StudentType> students;
其中初始化为零长度数组。
当需要从其他方法添加数据时 return,您可以传入一个引用并添加到其中:
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
要么作为参数传入,要么您只需键入一个空行来结束输入。使用全局变量确实很麻烦,应该强烈反对。
vector<StudentType> students[classSize]
是一期。您不是在声明一个接受向量的函数,而是在声明一个接受向量数组的函数。
其次,如果您只应用该更改,您将传递一个空向量,您可以通过将大小传递给构造函数来将向量初始化为特定大小。
此外,通过引用传递学生向量似乎会让您受益
vector<StudentType>& students
相反,& 创建了一个引用。现在你的代码在传递给函数时复制向量
#include <iostream>
#include <vector>
using namespace std;
const int classSize = 1;
struct StudentType {
string studentFName;
string studentLName;
int testScore;
char grade;
};
void collectStudentData(vector<StudentType>& students) {
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;
};
int main() {
vector<StudentType> students{classSize};
collectStudentData(students);
cout << students[0].studentFName << students[0].studentLName << students[0].studentFName;
};
如果您想进一步改进代码,您可以在 for 循环中使用迭代器,最好不需要在 main 中构造向量,并将其传递给函数来改变它。您可以直接构造它,然后 return 从函数中构造它。
我正在收集姓名和考试成绩来填充向量。函数和 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>'
的成员此行创建一个向量数组:
vector<StudentType> students[classSize] = {};
你想要的是单个向量:
vector<StudentType> students;
其中初始化为零长度数组。
当需要从其他方法添加数据时 return,您可以传入一个引用并添加到其中:
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
要么作为参数传入,要么您只需键入一个空行来结束输入。使用全局变量确实很麻烦,应该强烈反对。
vector<StudentType> students[classSize]
是一期。您不是在声明一个接受向量的函数,而是在声明一个接受向量数组的函数。
其次,如果您只应用该更改,您将传递一个空向量,您可以通过将大小传递给构造函数来将向量初始化为特定大小。
此外,通过引用传递学生向量似乎会让您受益
vector<StudentType>& students
相反,& 创建了一个引用。现在你的代码在传递给函数时复制向量
#include <iostream>
#include <vector>
using namespace std;
const int classSize = 1;
struct StudentType {
string studentFName;
string studentLName;
int testScore;
char grade;
};
void collectStudentData(vector<StudentType>& students) {
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;
};
int main() {
vector<StudentType> students{classSize};
collectStudentData(students);
cout << students[0].studentFName << students[0].studentLName << students[0].studentFName;
};
如果您想进一步改进代码,您可以在 for 循环中使用迭代器,最好不需要在 main 中构造向量,并将其传递给函数来改变它。您可以直接构造它,然后 return 从函数中构造它。