2014-11-05 318 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/