返回首页

我的题目可能有点混乱,但它是正确的。我有什么,我会打电话的头文件与支持了线类的类层次结构的所有,我遇到一些困难,信息传递。

我工作在一个小的直接3D应用。被分割的代码,在那里我有一个头文件名为Engine.h,然后现在,它包括2头,Input.h和Graphics.h。在顶部Engine.h,我有这个条目:

#include <Windows.h>



#include "Graphics.h"

#include "Input.h"

现在奇怪的是这里的我在Input.h定义的类,它是能够使用就好了,即HWND的窗口类型,但由于某些原因,我得到有关失踪类型的错误时,试图在我的图形使用的HWND h文件。这里是该文件:

{C}
我试图编译时收到错误是完全如下:

1>------ Build started: Project: engine, Configuration: Debug Win32 ------

1>  Graphics.cpp

1>c:\users\wyatt\documents\visual studio 2010\projects\engine\engine\graphics.h(15): error C2061: syntax error : identifier 'HWND'

1>c:\users\wyatt\documents\visual studio 2010\projects\engine\engine\graphics.cpp(14): error C2061: syntax error : identifier 'HWND'

1>  Generating Code...

1>  Compiling...

1>  Engine.cpp

1>  Generating Code...

1>  Compiling...

1>  EntryPoint.cpp

1>  Generating Code...

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我只是假设这个错误,它没有找到的HWND类型,但可能是别的东西吗?任何帮助将不胜感激。顺便说一句,MSVC的明示。

编辑:这里是Input.h文件:

input.h
{体C3}

回答

评论会员:安德烈Kraak 时间:2012/02/06
包含在你的头文件的Windows头文件,因为他们需要
因此,使用#include LT; WinDef.hgt;#包括lt; Windows.hgt;在您Graphics.h文件

要回答为什么Input.h工作不包括#包括LT; Windows.hgt;:
你的Input.h文件包括dinput.h的,这反过来又包括objbase.h,这反过来又包括许多其他的头文件。在一些点在这头链包括头定义的HWND,因此实际上,Input.h不包括windows.h
这是不应该依赖上虽然它是更好的做法,也包括#包括LT; WinDef.hgt的或#包括LT; Windows.hgt的。;
在您Input.h文件
包括WINDOWS.H多时间:
这不是一个问题,文件中包含],以确保它实际上只包含一次。
{的C4}
评论会员:游客 时间:2012/02/06
Stefan_Lang:当您的问题得到解决,这里是一些建议,如何对付这种类型的问题(和改善您的使用#include语句):对于任何导致问题的头做到以下几点:1。创建一个。cpp文件中只包含#include语句,头(加也许包含预编译头,如果你使用一个)2。删除所有的#include头文件中的语句(或评论出来,你可能需要更高版本)3。编译。cpp文件4。看看你的编译器的文本输出,找到的第一个错误消息,它可能会抱怨一些未知的符号"5.A),如果没有更多的"未知的符号"消息头!做你的5.B)如果有一个未知的符号信息,看看是否可以工作,没有它,使用前向声明,如果没有,检查的文件,其中包括文件​​,你需要为这个符号,并添加#包括。然后继续3。我不能强调不够,您的文件(或要求熟悉图书馆的人)找到合适的头文件,包括。通常情况下,你不会要直接包含一个文件,其中包含的定义,而是一个包含(或包括)以及可用于定义所规定的一些相关的东西。(这种依赖性不应该存在,但不幸的是,他们这样做。上述的算法的主要目的是为了避免这种依赖在你自己的头。)当你完成所有违规的头,做任何cpp文件,将无法编译,由于未知的符号是相同的:步骤2。5,只有这个时候不使用提出声明。这可能需要相当长的一段时间,但它会删除你的头,尤其是那些需要你在特定的顺序,其中包括问题的依赖,它可能会降低你的编译时间。(我曾经花了一个星期的清理这种依赖在一个大的项目,并在最终的编译时间缩短到三分之一!)