好吧,我知道我的标题是非常不清楚,但我认为部分问题是,我不知道如何解释清楚,足以谷歌是有用的。
基本上我有两个功能:
SentenceData parseSingleSentence(std::string inputString)
{
SentenceData actualSentenceData;
actualSentenceData.transmitter = inputString.substr(1, 2);
actualSentenceData.format = inputString.substr(3, 3);
// Data fields run from first ',' (index 7) and the last 3 characters can be disregarded
std::stringstream ss(inputString.substr(7, inputString.length()-10));
std::string newDataField;
while (!ss.eof()) {
getline(ss, newDataField, ',');
actualSentenceData.dataFields.push_back(newDataField);
}
return actualSentenceData;
}
bool hasCorrectNumberOfFields(SentenceData sentenceData)
{
std::map<std::string, int>::iterator iterator = supportedFormats.begin();
while (iterator != supportedFormats.end())
{
if (sentenceData.format == iterator->first && int(sentenceData.dataFields.size()) == iterator->second) return true;
++iterator;
}
return false;
}
在main()中,我想运行:
parseSingleSentence(inputString);
if (!hasCorrectNumberOfFields(actualSentenceData)) continue;
然而,有一个明显的问题-编译器没有识别出在调用parseSingleSentence()之后将返回的actualSentenceData。
错误为:376:43:使用了未声明的标识符"actualSentenceData"
我原本希望编译器能识别出第一个函数返回的变量,当它抛出错误时,我很快意识到了问题所在,但不知道解决方案是什么。
有什么办法可以解决这个问题吗?我已经花了几个小时试图找出我错过了什么,不知道从这里去哪里。
我在Google和Stack Overflow上搜索过。另外浏览了几个C++网站,看了一些教程,还有我大学的讲座。
2条答案
按热度按时间oyxsuwqo1#
您需要在另一个变量中 * 捕获 * 返回值(您可以随意命名它,这里我称它为
sd
)。局部变量只存在于声明它们的函数中,
return
不会改变这一点。从函数返回的是一个 * 值 * 而不是变量。如果你想保存那个值,你需要另一个变量。vzgqcmou2#
我猜你的意思是这样的
此外:
1.它被认为是减少变量范围的好方法,所以如果你使用现代C++标准,你可以选择使用以下代码:
hasCorrectNumberOfFields
中的参数是传值的,如果SentenceData
有移动构造函数,u最好使用const&
或者传值,调用时使用std::move(data)
。1.最好将
while
循环替换为range-based-for
: