C++使用getline为结构体成员输入字符串时类型不匹配报错原因求解
错误原因
- 结构体
StudentData的name成员定义错误:string name[50]的语法是声明包含50个std::string元素的数组,并非单个字符串变量。 std::getline函数的第二个参数要求传入单个std::string类型的引用,你传入的是string数组的首地址,两者类型完全不匹配,因此触发编译器的类型不匹配报错,报错信息中提到的std::string [50]就是你定义的name成员的实际类型。
修复方法
直接将name成员修改为单个std::string类型即可,这是C++处理字符串的标准方案,无需预先定长,适配getline的参数要求:
struct StudentData { string name; // 修改为单个std::string对象 char rollNo[20]; int semester; };
修改完成后原代码的getline语句就可以正常运行。
额外注意事项
如果后续调整输入顺序,先通过cin输入数字/字符数组,再调用getline读字符串,需要先调用cin.ignore()清理输入缓冲区残留的换行符,避免getline读到空内容。
内容的提问来源于stack exchange,提问作者Laxman Chinannavar
相关产品推荐
相关产品推荐

