VS 2008 - 标题的某些部分不包括在内?

时间:2011-05-18 07:32:10

标签: c++ header include

我在Visual Studio 2008下工作,也许这很重要。 在一个更大的项目中,我决定将我的一个.cpp文件拆分为两个。当我将一些函数移动到一个新文件时,让我们称它为new.cpp,并尝试编译,我得到的错误是new.cpp不知道fstreams的定义,{{1现在,在新文件的最顶部我添加了自己的标题,我们称之为setw(),而main_header.h又包含所有必需的<iostream><iomanip>等这在整个项目中使用的旧文件中都可以正常工作,但出于某种原因不在new.cpp中。

如果我添加

#include <fstream>
#include <iomanip>
// and all the rest
new.cpp

然后一切正常,但这不是我想要解决的方法。 我想也许main_header.h的内容在编译时没有附加到new.cpp,但事实并非如此,我尝试在new.cpp中使用main_header.h中声明的外部变量并定义在不同的.cpp中,在编译,链接或运行时没有错误。然而,<fstream>中包含的<iomanip>main_header.h似乎没有成为new.cpp文件。

我对Visual Studio比较陌生,所以我的问题的解决方案很可能是我不知道的傻事,但我花了很多时间试图弄清楚这个问题并且无济于事。新文件肯定是项目的一部分,因为构建项目会尝试编译它,加上我在iostream中包含iomanipnew.cpp后,我可以在其他部分调用它的例程。项目。我可能做错了什么想法?

main_header.h看起来像那样

#ifndef MAIN_HEADER
#define MAIN_HEADER

#include <iomanip>
#include <fstream>
// loads of other stuff

#endif  // for MAIN_HEADER



更新:好的,所以在我使用相同的文件创建一个全新的项目后的第二天,现在一切正常,我不需要在new.cpp中包含iomanip或其他任何内容。这肯定是因为VS不是代码本身的一些奇怪的事情,但仍然打败了我究竟是什么问题。

2 个答案:

答案 0 :(得分:1)

这可能是由前缀头或预编译头引起的,可以在整个项目中设置,也可以只在new.cpp文件上设置,这可以解释为什么会有一些区别。这里有几件事要尝试:

  • 属性 - &gt; C ++ - &gt;预编译头:检查整个项目和各个文件的设置
  • 属性 - &gt; C ++ - &gt;高级 - &gt;强制包括:检查两者是否相同
  • 在文本编辑器中打开vcproj文件并找到new.cpp节点 - 这是查找此单个文件是否具有不同编译器设置的快速方法
  • 属性 - &gt; C ++ - &gt;预处理器 - &gt;生成预处理文件:这将生成一个中间new.i文件,其中包含所有#includes和宏。比较这两个文件的结果并查找差异 - 这可能会显示为什么一个工作而另一个不工作

答案 1 :(得分:0)

你还有另一个标题还有#define MAIN_HEADER吗?

通过复制旧标题创建新标题时,很容易犯这样的错误,并导致像这样的神秘症状。