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

使用stringstream的C++ Student类实现问题求助

问题分析与修复方案:Student类Setter函数赋值失败导致输出异常

核心问题

你的代码里所有Setter函数都犯了同一个错误:参数名和类成员变量名完全相同,导致函数内部的赋值操作只是把参数值赋给自己,根本没修改到类的成员变量。

比如set_age函数里的age = age;,这里的age都是函数的局部参数,类的成员变量age完全没被赋值,始终是默认初始化的垃圾值(int类型);字符串类型的成员变量则是空字符串,这就是为什么你的输出会出现随机垃圾值、空字符串、0这类异常结果。

另外,to_string函数里用了std::endl,会在生成的字符串末尾额外添加换行符,和预期输出不符,需要去掉。

修复后的代码

方案1:修改参数名,与成员变量区分

#include <iostream>
#include <sstream>
#include <string>

class Student{
    private:
        int age;
        std::string first_name;
        std::string last_name;
        int standard;
    public:
        void set_age(int a){
            age = a;
        }
        int get_age(){
            return age;
        }
        void set_standard(int s){
            standard = s;
        }
        int get_standard(){
            return standard;
        }
        void set_first_name(std::string fn){
            first_name = fn;
        }
        std::string get_first_name(){
            return first_name;
        }
        void set_last_name(std::string ln){
            last_name = ln;
        }
        std::string get_last_name(){
            return last_name;
        }
        std::string to_string(){
            std::stringstream os;
            os << age << "," << first_name << "," << last_name << "," << standard;
            return os.str();
        }
};

int main() {
    int age, standard;
    std::string first_name, last_name;
    
    std::cin >> age >> first_name >> last_name >> standard;
    
    Student st;
    st.set_age(age);
    st.set_standard(standard);
    st.set_first_name(first_name);
    st.set_last_name(last_name);
    
    std::cout << st.get_age() << "\n";
    std::cout << st.get_last_name() << ", " << st.get_first_name() << "\n";
    std::cout << st.get_standard() << "\n";
    std::cout << "\n";
    std::cout << st.to_string() << "\n";
    
    return 0;
}

方案2:使用this指针明确指向成员变量

如果不想修改参数名,可以用this->成员变量的方式,明确指定要修改的是类的成员:

// 以set_age为例,其他Setter函数同理
void set_age(int age){
    this->age = age;
}

修复后效果

输入示例中的数据后,会输出预期结果:

15
carmack, john
10

15,john,carmack,10

内容的提问来源于stack exchange,提问作者Parke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:50:34