0

いくつかのステートメントを XML ファイルに出力しようとしている次のコード スニペットがあります。

void parseXML::writeStruct(std::fstream& abc,std::string prnt)
{
    for (map<string,struct structSet>::iterator it = structData.begin();it != structData.end();it++)
    {
      if (((it->second.parent.compare("")==0) && (it->second.written == false)))
      {
        bool write = true;
        if (it->second.type.compare("")==0)
        {
            for (set<std::string>::iterator i = it->second.fields.begin(); i != it->second.fields.end(); i++)
            {
                map<string,struct fieldSet>::iterator fd = fieldData.find(*i);
                if (fd != fieldData.end())
                {
                    std::string type = fd->second.type;
                    map<string,struct structSet>::iterator ntC = structData.find(type);
                    if (ntC != structData.end())
                    {
                        if (ntC->second.type.compare("") != 0)
                        {
                           map<string,struct structSet>::iterator ntC = structData.find(ntC->second.type);
                           if (ntC == structData.end()|| ntC->second.type.compare("")!= 0||ntC->second.written == false)
                           {  
                              continue;
                           }

                        }
                        else
                        {
                            map<string,struct structSet>::iterator ntC = structData.find(ntC->second.type);
                            if (ntC->second.parent.compare(it->second.name))
                            {
                            }
                            else if (ntC->second.written == true)
                            {
                                abc << INDENT << "\t" <<"\t" << "<nonterminal ref= \"" << ntC->second.name.c_str() << "\">" << std::endl;
                                abc << INDENT << "\t" << "\t" <<"\t" << "<name>" << fd->second.name.c_str() << "</name>" << std::endl;
                                abc << INDENT << "\t"<< "\t" << "</nonterminal >" << std::endl;
                            }
                        }
                    }

for問題は、最初のループを実行していないことです:

for (map<string,struct structSet>::iterator it = structData.begin(); it != structData.end(); it++)

これにはどのような理由が考えられますか?

4

1 に答える 1

2

以下は(できれば)完全なリストです。明らかなエントリで申し訳ありませんが、あなたがどの程度の経験を積んでいるかはわかりません。

  • structData空です
  • structDataが破損しているため、アプリケーションがクラッシュします
  • parseXML::writeStruct実行されたことはありません
  • for ループが実行されましたが、次の ( if, for) 条件が失敗し、これを間違って解釈しました。

デバッガーを選択するか、トレース メッセージを追加します (endl出力は通常行バッファーされており、クラッシュした場合に失われるため、使用することを忘れないでください)。

注:コードの関連部分のみを投稿してください。残りの部分は単なるノイズです( https://codereview.stackexchange.com/があるコードレビューが必要な場合を除く)

于 2012-07-31T22:42:30.193 に答える