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

C++报错:invalid use of non-static member function 问题求助

问题分析与修复

你的代码存在两个关键问题:

  1. 成员函数调用错误:你在main里写的student.get_name和custom_student.get_name是获取函数指针,而非调用函数,正确调用需加上括号()。但这里还有第二个核心问题——

  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:15:31