[英]VS 2008 - some parts of header not included?
我正在Visual Studio 2008下工作,也许这很重要。 在一个较大的项目中,我决定将一个.cpp文件拆分为两个。 当我将一些函数移到新文件中时,我们将其new.cpp
并尝试进行编译,但出现了new.cpp
不知道fstreams
, setw()
等定义的fstreams
。在新文件的顶部,我包含了自己的标头,我们称其为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定义,并得到了编译,链接或运行时没有错误。 但是,似乎main_header.h
包含的<fstream>
和<iomanip>
并未进入new.cpp
文件。
我是Visual Studio的新手,因此解决我的问题的方法可能是我不知道的愚蠢之举,但是我花了很多时间试图弄清楚这一点,但无济于事。 新文件绝对是项目的一部分,因为构建项目会尝试对其进行编译,此外,一旦在此new.cpp
包含iostream
和iomanip
,我就可以在项目的其他部分调用它的例程。 有什么想法我可能做错了吗?
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的一些奇怪之处有关,而不是代码本身,但是仍然使我难过。
这可能是由前缀标头或预编译标头引起的,它们可以在整个项目中设置,也可以仅在new.cpp
文件中设置,这可能解释了为什么存在一些区别。 这里有一些尝试:
new.cpp
节点-这是查找此单个文件是否具有不同编译器设置的快速方法 new.i
文件,其中所有#includes和宏都已解析。 比较这两个文件的结果并查找差异-这可能表明为什么一个起作用而另一个不起作用 您是否在其他地方也有#define MAIN_HEADER
标头?
通过复制旧的标题来创建新的标题时,这是一个容易犯的错误,并导致诸如此类的神秘症状。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.