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

