为什么这段代码被忽略了?

时间:2013-03-03 01:58:31

标签: c++ templates

在以下代码中,永远不会调用set_black_hole()。为什么呢?

我向set_black_hole()set_data()添加了小字体。 Set_data()会按预期重复调用,但永远不会调用set_black_hole()。当我在调用set_black_hole()之前运行调试器并设置断点时,它只是跳到它后面的if()语句。

思想?

这是模板特定问题吗?

/******************************************************************
*   build_list
*     add new items to the list until input is exhausted
*/

template <typename T>
void List<T>::build_list(ifstream &fin)
{
   T *pT;
   bool readSuccess;    // successful read of object data
   bool storeSuccess;   // successful node addition

   pT = new T;

   readSuccess = pT->set_black_hole(fin); // fill the T object
   if (readSuccess) {
       storeSuccess = add_node(pT);
   }

   while (true)
   {
      storeSuccess = false;
      readSuccess = pT->set_data(fin); // fill the T object
      if (fin.eof())
      {
         delete pT;
         break;
      }

      // insert object data into the list
      if (readSuccess)
         storeSuccess = add_node(pT);
      else   // something bad happened during node setup
      {
         delete pT;
         fatal_err(BAD_SET_DATA);
      }
      if (!storeSuccess)   // something bad happened during store
         fatal_err(BAD_ADD_NODE);
   }

}

1 个答案:

答案 0 :(得分:1)

您是否尝试过重新编译/重建项目?我之前在Visual Studio中遇到过这个问题,当我在调试时项目引用旧版本时,因为在Visual Studio中意外切换了“在运行之前构建”选项。如果您在调用set_black_hole()的行上设置断点,则可以很好地指示这一点,并且当您尝试调试时,断点将变为透明。