Visual Studio 2017下C++对象向量代码触发C3867错误求助
解决C3867错误:调用成员函数时缺少括号
兄弟,你的C3867错误完全是因为一个容易忽略的小细节:调用Student类的getName()和getGrade()成员函数时,没加括号。
在C++里,成员函数的调用必须带上()(哪怕没有参数),不然编译器会误以为你是在取函数的地址,而不是执行函数获取返回值。你的代码里有两处都犯了这个错:
- 在
saveClassInfo函数里:newFile << newClass[i].getName << "\t\t" << newClass[i].getGrade << endl; - 在
printClassInfo函数里:cout << newClass[i].getName << "\t\t" << newClass[i].getGrade << endl;
修正后的代码
把上面两行改成带括号的函数调用形式就搞定了:
修正后的saveClassInfo函数
void saveClassInfo(vector<Student> &newClass) { ofstream newFile; newFile.open("class_info.txt"); if (newFile.fail()) { perror("The following error occured"); } else { for (int i = 0; i < newClass.size(); i++) { newFile << newClass[i].getName() << "\t\t" << newClass[i].getGrade() << endl; } } newFile.close(); cout << "Done saving.\n"; }
修正后的printClassInfo函数
void printClassInfo(vector<Student> &newClass) { for (int i = 0; i < newClass.size(); i++) { cout << newClass[i].getName() << "\t\t" << newClass[i].getGrade() << endl; } }
额外小提醒
顺便提一句,你代码里的成绩判断逻辑有个小bug:
if (student_grade >= 'A' || student_grade <= 'F')
这里应该用&&而不是||,不然任何字符都会满足条件(比如'Z' >= 'A'是true,会直接创建学生对象)。正确的判断应该是:
if (student_grade >= 'A' && student_grade <= 'F')
这样修改后,不仅能解决C3867错误,成绩验证的逻辑也会正常工作。
内容的提问来源于stack exchange,提问作者Ryon
相关产品推荐
相关产品推荐

