You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:41:26