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

C++无法向自定义类传递参数,调用相关函数时崩溃如何解决?

问题成因
  • 构造函数参数类型不匹配:user类的构造函数要求传入vector<string>和vector<int>两个容器类型参数,但你在holder函数中传入的是单个string类型的_name和单个int类型的_age,类型完全不匹配,属于语法错误,正常编译阶段就会报错,即便强制运行也会因为参数类型错误触发内存访问异常导致崩溃。
  • 输入数据未做存储:你在循环中收集了6次用户输入,但每次输入的姓名和年龄都直接覆盖了_name和_age变量,没有将历史输入存入对应的vector容器中,就算参数类型匹配也无法传入所有收集到的数据。
  • 代码存在两处遗漏:一是holder函数末尾return 0后缺少分号,会导致编译失败;二是原代码没有声明std命名空间,vector、cout等标准库组件无法直接识别。
修复方案
  1. 首先在holder函数开头定义两个vector容器,用于存储所有收集到的姓名和年龄
  2. 每次循环获取用户输入后,将输入值插入到对应vector中
  3. 调用user构造函数时传入存储了所有数据的两个vector即可
  4. 补充命名空间声明和缺失的语法符号

修正后的完整代码

#include <iostream>
#include <vector>
#include <string>
#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif

using namespace std;

class user{
public:
    vector<string> Name;
    vector<int> Age;

    void outP() {
        for (unsigned int i = 0; i < Name.size(); i++)
        {
            cout << Name[i] << " , ";
        }
    }
    user(vector<string> name, vector<int> age) {
        Name = name;
        Age = age;
    }
};

int holder() {
    vector<string> name_list;
    vector<int> age_list;
    string _name;
    int _age;
    int f = 0;

    while (true)
    {
        f++;
        cout << "enter name :";
        cin >> _name;
        cout << endl;
        cout << "enter age :";
        cin >> _age;
        name_list.push_back(_name);
        age_list.push_back(_age);

        if (f == 6)
        {
            break;
        }
    }
    user user1 = user(name_list, age_list);
    // 可调用outP验证输出结果
    user1.outP();
    return 0;
}

int main() {
    holder();
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:03:00