我正在制作一个简单的命令行Hangman游戏.
void Hangman::printStatus()
{
cout << "Lives remaining: " << livesRemaining << endl;
cout << getFormattedAnswer() << endl;
}
string Hangman::getFormattedAnswer()
{
return getFormattedAnswerFrom(correctAnswer.begin(), correctAnswer.end());
}
string Hangman::getFormattedAnswerFrom(string::const_iterator begin, string::const_iterator end)
{
return begin == end? "" : displayChar(*begin) + getFormattedAnswerFrom(++begin, end);
}
char Hangman::displayChar(const char c)
{
return c;
}
Run Code Online (Sandbox Code Playgroud)
(最后,如果用户已经猜到了,我会更改它以displayChar()显示一个-或一个字符,但为了简单起见,我现在只返回所有内容.)
当我从VS 2010构建并运行它时,我得到一个弹出框:
调试断言失败!
xstring线:78
表达式:字符串迭代器不可解除引用
我究竟做错了什么?
问题在于评估:
displayChar(*begin) + getFormattedAnswerFrom(++begin, end)
Run Code Online (Sandbox Code Playgroud)
在执行此语句时,很明显您的编译器首先递增begin,返回"next" begin以用作第一个参数getFormattedAnswerFrom,然后取消引用begin参数displayChar.
如果begin是一个落后end,那么begin != end这样displayChar(*begin) + getFormattedAnswerFrom(++begin, end)就会运行.您的编译器递增begin,所以现在begin == end,取消引用begin无效.
另请参阅:C++函数参数中的评估顺序
| 归档时间: |
|
| 查看次数: |
530 次 |
| 最近记录: |