[英]Uninitialized local variable error on a vector in C++
我正在尝试完成我的C ++类的作业,但遇到了一个问题,到目前为止我还没有找到答案。
我正在尝试做的是创建一个可以无限增长直到用户中断循环的向量。 此向量必须包含班级对象,以保存学生姓名和成绩信息。 我正在上课。 在这一点上,似乎给我带来麻烦的是程序的唯一部分。
我不断收到此错误代码:
错误C4700:使用了未初始化的局部变量'students'
这是我的功能:
void vectorfctn(){
vector<student> *students; //I'm assuming this is what is causing the error
string stud;
double ex1;
double ex2;
double hw;
double fex;
char exit;
do {
cout << "Enter Student Name" << endl; cin >> stud;
cout << endl << "Enter First Exam" << endl; cin >> ex1;
cout << endl << "Enter Second Exam" << endl; cin >> ex2;
cout << endl << "Enter Homework" << endl; cin >> hw;
cout << endl << "Enter Final" << endl; cin >> fex;
student* s1 = new student(stud, ex1, ex2, hw, fex);
s1->calcFinalGrade();
students->push_back(*s1); //This is the line referenced by visual studio in the error
cout << "Would you like to continue? y or n" << endl;
cin >> exit;
delete s1;
} while (exit != 'n');
for (size_t i = 0; i < students->size(); i++) {
cout << students->at(i).calcFinalGrade() << endl;
}
};
如何在不限制向量大小的情况下初始化向量? 我很喜欢矢量,但并不是很了解它们,所以任何建议都将不胜感激。
students
向量不必是指针。
替换vector<student> *students;
与vector<student> students;
和
students->pushback()
到students.pushback()
首先,声明vector
对象 ,而不是指针。
vector<student> students;
其次,在本地声明student
,而不是指针和new
。
student s1(stud, ex1, ex2, hw, fex);
第三, push_back
。
students.push_back(s1);
线vector *students;
创建vector
的指针,而不是向量本身。 当您尝试通过->调用其成员函数时,还没有创建矢量,因此您无法在内部push_back任何内容,从而导致错误。
要解决此问题,只需在vector *students;
处删除* vector *students;
并将所有students->push_back
替换为students.push_back
您正在创建指向向量的指针(声明),但实际上并未创建向量(定义)。 正如其他人所说,只需在堆栈上创建向量即可。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void vectorfctn() {
vector<Student> students;
string stud;
double ex1;
double ex2;
double hw;
double fex;
char exit;
do { // todo: validate user input
cout << "Enter Student Name" << endl; getline(cin, stud);
cout << endl << "Enter First Exam" << endl; cin >> ex1;
cout << endl << "Enter Second Exam" << endl; cin >> ex2;
cout << endl << "Enter Homework" << endl; cin >> hw;
cout << endl << "Enter Final" << endl; cin >> fex;
//Student s1 = Student(stud, ex1, ex2, hw, fex);
//s1.calcFinalGrade(); // does this really need to be here? It's also used below in the for loop
//students.push_back(s1);
students.push_back(Student(stud, ex1, ex2, hw, fex));
cout << "Would you like to continue? y or n" << endl; cin >> exit;
} while (exit != 'n');
for (auto student : students) { cout << student.calcFinalGrade() << endl; }
};
使用push_back将所需的内容附加到向量上。
vector<int> myVec;
myVec.push_back(2);
myVec.push_back(3);
我认为您的push_back语法不正确。 这有帮助吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.