2011-08-20 63 views
0

我在Visual Studio 2008中使用C++語言和MFC文件創建了一個程序。它是一個圖形用戶界面,它使用C++的文件處理將學生記錄存儲在文件中。它正常工作,並顯示或添加記錄,但是當我嘗試修改和刪除記錄時,它會在運行時給我一個斷言錯誤。運行程序期間聲明錯誤

請幫我一把。

我用來修改和刪除記錄的函數代碼在這裏。

void modifyrec() 
{ 
    Invalidate(); 

    bool found; 

    struct student e; 

    getname_dialog diag; 
    if(diag.DoModal()==IDOK) 
    { 
     found = false; 

     fp.SeekToBegin(); 

     while(fp.Read(&e,sizeof(e))>=sizeof(e)) 
     { 
      if(e.batch_no==g_batchno && strcmp(e.name,g_name)==0) 
      { 
       found = true; 
       break; 
      } 
     } 

     if(found == true) 
     { 
      modify_dialog mdiag(e); 
      mdiag.DoModal(); 
     } 
     else 
      MessageBox("Record Not Found","Modify Record...."); 
    } 
} 

void delrec() 
{ 
    bool foun; 
    struct student e; 

    Invalidate(); 

    getname_dialog diag; 
    if(diag.DoModal()==IDOK) 
    { 
     found = false; 
     fp.SeekToBegin(); 

     CFile ft("temp.dat",CFile::modeCreate | CFile:modeWrite); 
     while(fp.Read(&e,sizeof(e))>= sizeof(e)) 
     { 
      if(e.batch_no==g_batchno && strcmp(e.name,g_name)==0) 
      { 
       found = true; 
       break; 
      } 
     } 

     if(found == true) 
     { 
      modify_dialog mdiag(e); 
      mdiag.DoModal(); 
     } 
     else 
      MessageBox("Record Not Found","Delete Record...."); 


     fp.Close(); 
     ft.Close(); 

     CFile::Remove("students.dat"); 
     CFile::Rename("temp.dat","student.dat"); 
     fp.Open("students.dat",CFile::modeCreate |CFile::modeNoTruncate |CFile::modeReadWrite); 
    } 
} 
+0

斷言錯誤說什麼!看看代碼,我可以看到在delrec中的邏輯錯誤,但沒有任何會導致斷言錯誤。 – john

+0

答案似乎在未顯示的代碼中。 –

+0

我會立即粘貼整個程序代碼,如果你們說或者它是有用的告訴錯誤 – sam

回答

9

你似乎已經從對話框資源中移除一個或多個控件,並DoDataExchange仍指他們(通過一個DDX_CONTROL功能)。找出這些資源是什麼,並從DoDataExchange中刪除它們的引用。

稍後,您可以從resource.h中刪除那些控件ID(IDC_),如果它們是未使用通過項目中的其他對話框。

要找出未使用的資源ID做:

  • 轉到資源視圖
  • 選擇適當的.RC文件
  • 右鍵單擊,然後單擊Resource Symbols..
  • 在對話框中,發現未使用的ID (沒有檢查他們)
+1

堅持不懈。 – john

+0

非常感謝。你節省了我的時間。最後我修正了錯誤 –