C++代码getline函数报无匹配参数实例错误该如何解决
错误根因
std::getline的第三个参数仅支持单个char类型的分隔符,你写的' , '是多字符字面量,和函数要求的参数类型不匹配,因此编译器抛出没有匹配实例的错误。
修复步骤
- 先把报错行的分隔符替换为单个逗号,拆分后再处理字符串前后的空格即可适配逗号加空格的分隔格式:
// 把原来的错误行替换为以下逻辑 while (getline(s, word, ',')) { // 去除拆分后字符串前后的冗余空格 word.erase(0, word.find_first_not_of(" ")); word.erase(word.find_last_not_of(" ") + 1); row.push_back(word); }
- 顺带修复代码中的其他隐藏问题:
- 类
Candidate的默认构造函数里,int votes = 0;是声明了局部变量,类的成员votes没有被初始化,直接改成votes = 0;即可 - 读取文件的外层逻辑有问题:
fin >> temp会吃掉每行第一个空格前的内容,导致后续getline读取的行不完整,直接把外层循环改成while (getline(fin, line))即可,不需要额外的temp变量 - 排序时写的
std::sort(allCandidates, allCandidates + 10)如果候选人数量不足10个会触发数组越界,改成按实际存储的index数量排序:std::sort(allCandidates, allCandidates + index, ...) - 新增候选人时下标写错了:
allCandidates[index + 1]会跳过当前空闲的下标,改成allCandidates[index]即可
内容的提问来源于stack exchange,提问作者ThundeReX
相关产品推荐
相关产品推荐

