我正在使用庫來解析.pgn文件,當我試圖運行該項目,我發現這個錯誤:調試斷言失敗!程序:C:\ windows \ system32 \ MSVCP110D.dll文件:c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ xstring 行:79 表達式:字符串迭代器不可取消 有關如何程序可能會導致斷言失敗,請參閱斷言上的Visual C++文檔。字符串迭代器是不可取的
問題是,當迭代器到達文件末尾時,它指向無(啓動迭代器(itr1)==結束迭代器(itr2)),我試圖添加條件來檢查itr1是否到達文件的結尾,但它沒用。 那麼請告訴我我的錯在哪裏。 這裏是我的代碼source.cpp文件:
#include <iostream>
#include <fstream>
#include <PGNGameCollection.h>
int main()
{
std::ifstream pgnfile("sample.pgn");
pgn::GameCollection games;
pgnfile >> games;
std::cout << "the file sample.pgn contains " << games.size() << "games" << std::endl;
system("pause");
return 0;
}
這裏是類函數導致錯誤:
bool pgn::Parser::getComment(std::string::const_iterator &itr1, const std::string::const_iterator &itr2, pgn::CommentText &out)
{
std::string::const_iterator local_itr=itr1;
std::string comment;
if(*local_itr != '{')
return false;
local_itr++; //skipping '{'
while((*local_itr != '}') && (local_itr != itr2))
{
comment += *local_itr++;
}
local_itr++; //skipping '}'
skipBlanks(local_itr, itr2);
itr1=local_itr;
out=pgn::CommentText(comment);
return true;
}
skipBlanks功能:
void pgn::Parser::skipBlanks(std::string::const_iterator &itr1, cost std::string::const_iterator &end)
{
while((itr1 != end) && (isspace(*itr1)))
{
itr1++;
}
}
我已搜查和計算器谷歌所有類似的問題,但我找不到答案。我也一行一行地追溯代碼,直到我找到導致錯誤的函數。
解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –
我在問這裏之前已經逐行調試了代碼,但是我找不到答案! –
然後你可能會以錯誤的方式使用調試器。 –