2014-11-05 213 views
0

我不知道該怎麼做。我寫了一個讀取.obj文件的函數,與用於處理來自文本文件的信息的幾十個其他示例函數不同。我已經包含了fstream,iostream和sstream。它編譯。然而,當我運行它,我得到:fstream包含但​​「ifstream未找到」和「標識符未定義」

  • 在那抱怨 約訪問衝突寫入位置(我讀,不寫 ...)內存地址(NTDLL.DLL)未處理的異常。

  • 如果我在「ifstream myfile(...)」行放置中斷,則顯示「Unable to read memory」,而不是「ifstream myfile」讀取標識符「myfile」閱讀字符串的字符也發生之前,爲了未處理的異常,則對getline通話過程中

  • 執行停在這裏的fstream:

    virtual void __CLR_OR_THIS_CALL _Lock() 
    { // lock file instead of stream buffer 
    if (_Myfile) 
        _CSTD _lock_file(_Myfile); 
    } 
    

相關的代碼,不多看...很直接轉發的東西。「文件」是一個const char * r eads「C:\ cube.obj」。使用命名空間標準。

ifstream myfile(file, ios::in); 

if (myfile.is_open()) 
{ 
    if (myfile.good()) 
    { 
     string line; 
     while (std::getline(myfile, line)) 
     { 
      // Foo 
     } 
    } 
} 

myfile.close(); 

我不明白地球上myfile是如何定義的,儘管直接聲明它。 fstream顯然是正確的,並且可以訪問。該文件是它應該在的地方。

如何進一步調試?教我,聰明的人。在Visual Studio 2013中使用C++ 11.

+0

C:\目錄可能無法訪問您的程序的權限級別。嘗試將cube.obj放在文檔中。 – IllusiveBrian 2014-11-05 16:09:04

+0

從我記憶中,你需要跨越聲明行,然後才能獲得有關創建對象的信息。 – chris 2014-11-05 16:09:14

+0

順便說一句,你不需要關閉ifstream,析構函數會做到這一點。 – 2014-11-05 16:11:40

回答

0

已解決!我知道這不是指針相關的。發現了這篇文章,嘗試了它所說的,現在它完美無缺。我的依賴項中缺少MSVCRTD.lib。爲什麼沒有提到使用fstream的先決條件是瘋狂的。不能相信包括是不夠的。

「我必須更改運行時庫設置以使用多線程DLL(/ MD),然後將msvcrtd.lib添加到我的依賴項,這解決了我在調試模式下遇到的問題。

http://www.gamedev.net/topic/660218-strange-ifstream-crash/