C++:如何让第一个函数创建的对象供第二个函数作为参数使用?
问题原因与解决方案
你遇到的错误核心是函数内部的局部变量无法被外部作用域访问,且你没有接收parseSingleSentence函数的返回值。
错误分析
parseSingleSentence函数里的actualSentenceData是函数内部的局部变量,它的作用域仅局限于该函数内部。当你在main中只执行parseSingleSentence(inputString);时,函数确实会返回一个SentenceData对象,但这个对象没有被保存到任何变量中——main作用域里根本不存在名为actualSentenceData的变量,所以编译器报出“未声明标识符”的错误。
修复代码
在main函数中声明一个SentenceData类型的变量,显式接收函数的返回值即可:
// 接收函数返回的对象,此时main中的actualSentenceData才是有效变量 SentenceData actualSentenceData = parseSingleSentence(inputString); if (!hasCorrectNumberOfFields(actualSentenceData)) continue;
如果使用C++11及以上版本,也可以用auto自动推导变量类型,让代码更简洁:
auto actualSentenceData = parseSingleSentence(inputString); if (!hasCorrectNumberOfFields(actualSentenceData)) continue;
额外优化提示
你的parseSingleSentence函数中用while (!ss.eof())读取字段的写法存在潜在问题:当最后一个字段为空时,可能会出现重复读取的情况。建议改成更可靠的写法:
std::stringstream ss(inputString.substr(7, inputString.length()-10)); std::string newDataField; // 直接将getline作为循环条件,直到读取失败时退出 while (getline(ss, newDataField, ',')) { actualSentenceData.dataFields.push_back(newDataField); }
内容的提问来源于stack exchange,提问作者TheEmpressEllaseen
相关产品推荐
相关产品推荐

