C++报错:invalid use of non-static member function 问题求助
问题分析与修复
你的代码存在两个关键问题:
成员函数调用错误:你在
main里写的student.get_name和custom_student.get_name是获取函数指针,而非调用函数,正确调用需加上括号()。但这里还有第二个核心问题——get_name函数返回类型不匹配:当前get_name是void类型,它直接在函数内部输出name,但你试图将其放入std::cout的输出链中,这会触发编译错误,因为void类型无法参与流输出操作。
修复方案(两种可选)
方案一:修改get_name为返回字符串类型
将get_name改为返回std::string,使其能正常在cout语句中使用,更符合封装设计思路:
#include <iostream> #include<string> class Student{ private: std::string name{}; public: Student() : name{"unknown"} {}; Student(std::string s){ name = s; } // 修改返回类型为std::string,移除内部cout std::string get_name(){ return name; } }; int main(){ Student student; std::cout<<"Default name is: "<<student.get_name()<<std::endl; Student custom_student("adam"); std::cout<<"Custom name is: "<<custom_student.get_name()<<std::endl; return 0; }
方案二:保留void类型,调整输出逻辑
如果想维持get_name内部输出的原有逻辑,需拆分输出语句:
#include <iostream> #include<string> class Student{ private: std::string name{}; public: Student() : name{"unknown"} {}; Student(std::string s){ name = s; } void get_name(){ std::cout<<name; } }; int main(){ Student student; std::cout<<"Default name is: "; student.get_name(); // 直接调用函数输出name std::cout<<std::endl; Student custom_student("adam"); std::cout<<"Custom name is: "; custom_student.get_name(); std::cout<<std::endl; return 0; }
两种方案均可解决问题,你可根据需求选择。
内容的提问来源于stack exchange,提问作者Sampath P
相关产品推荐
相关产品推荐

