1

我有一个大型程序正在运行,而不是一个 .h 文件,当我尝试声明私有 ofstream 时,它给了我“无效使用未定义类型”的错误。在 Eclipse 中,我还收到关于“声明 struct std::ofstream”的错误,带有外部位置 /user/include/c++/4.1.2/iosfwd(我检查了一下,这是定义 ofstream 的行/位置)。我已经包含了 iostreams 和 fstreams。

如果我尝试将声明更改为使用 ifstream 或 fstream 我会得到相同的错误,只是现在我尝试使用的任何对象类型的声明都会出错。

为了让事情变得更烦人,我在程序的其他地方使用了 fstream 和 ifstreams。有一次,我非常生气,以至于我使用 ifstream 将有效 .h 文件的全部内容复制到 .h 文件中,这给了我一个错误……我得到了同样的错误。当唯一的变化是文件名和 if_def 宏时,我不知道为什么一个文件中有效的代码在另一个文件中无效。这两个 .h 文件位于同一目录中。

很抱歉,我无法发布要审核的代码。它是在另一台计算机上编写的,无法将代码从计算机 A 传输到 B(也无法访问互联网)。但是,如果您能提供一个建议,说明为什么我会在不查看代码的情况下测试此错误,我将不胜感激。

编辑:在玩了一些之后,我知道如果我从它的 CPP 文件中删除 .H 文件,错误就会消失。所以如果文件名为 VectorOutput.h。如果我从 VectorOutput.cpp 中删除#include,即使我将它包含在其他文件中,eclipse 也不会抱怨。如果我以任何方式更改 VectorOutput.cpp 的名称,错误也会消失。这是……奇怪的。我不知道这可能意味着什么,据我所知,文件的名称和具体位置应该没有任何意义。通过重命名文件,我暂时摆脱了这个问题,但如果有人猜到的话,我真的很想知道他的根本原因。

4

1 回答 1

1

你提供的东西很少。我会检查你的命名空间。检查您是否使用前缀 std:: 正确声明了您的类型。

编辑:实际上,如果您在标头中使用ofstream (并且因为您将其声明为成员),则必须包含 fstream 标头。iosfwd 仅适用于前向声明类型。

于 2012-06-19T14:29:27.100 回答