包括 fstream,但"ifstream not found"和"identifier is undefined"

fstream included but "ifstream not found" and "identifier is undefined"

本文关键字:identifier is undefined found ifstream fstream 包括 not      更新时间:2023-10-16

我不知道该怎么办。我已经编写了一个读取.obj文件的函数,这与其他几十个处理文本文件信息的示例函数没有什么不同。我已经包括了fstream、iostream和sstream。它编译。然而,当我运行它时,我得到:

  • 内存地址(ntdll.dll)处出现未处理的异常,该异常报告关于访问违规写入位置(我正在阅读,而不是书写…)。

  • 我在"ifstreammyfile"上的变量监视读取标识符"myfile"是未定义的。如果我在"ifnstreammyfile(…)"行上放置一个中断,它将读取"无法读取内存"。读取字符串字符的错误也发生在未处理异常之前。

  • 在getline调用期间,fstream中的执行停止:

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

相关代码,没什么可看的。。。非常直接的东西。"file"是一个const char*,读作"C:\cube.obj"。使用命名空间std.

ifstream myfile(file, ios::in);
if (myfile.is_open())
{
    if (myfile.good())
    {
        string line;
        while (std::getline(myfile, line))
        {
            // Foo
        }
    }
}
myfile.close();

我不明白为什么我的文件是未定义的,尽管直接声明了它。fstream显然是正确的include,并且可以访问。文件在它应该在的位置。

如何进一步调试?教我吧,哦,聪明的人。在Visual Studio 2013中使用C++11。

已解决!我知道这与指针无关。找到了这个帖子,尝试了它所说的,现在它完美地工作了。我的依赖项中缺少MSVCRTD.lib。为什么在任何地方都没有提到这是使用fstream的前提条件,这太疯狂了。真不敢相信包含的内容还不够。

"我不得不更改运行库设置以使用多线程DLL(/MD),然后将:msvcrtd.lib添加到我的依赖项中,这解决了我在调试模式下构建时遇到的问题。"

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