包括及其在C+中的调用顺序+;,窗户 我对这个问题有点困惑,我确信这是我在C++编程中应该知道的一个基本的问题,但这里的问题是:

包括及其在C+中的调用顺序+;,窗户 我对这个问题有点困惑,我确信这是我在C++编程中应该知道的一个基本的问题,但这里的问题是:,c++,windows,C++,Windows,我有一个“Windows.cpp”,顶部有 #include <windows.h> #include "Game.h" #include "Mouse.h" #include "Screen.h" ... #包括 #包括“Game.h” #包括“Mouse.h” #包括“Screen.h” ... 在我的Screen.h中,由于使用DWORD,显然需要从windows.h获取以下信息: #pragma一次 #包括 类屏幕服务器; 类屏幕客户端 { 公众: 屏幕客户端(const

我有一个“Windows.cpp”,顶部有

#include <windows.h>
#include "Game.h"
#include "Mouse.h"
#include "Screen.h"
...
#包括
#包括“Game.h”
#包括“Mouse.h”
#包括“Screen.h”
...
在我的Screen.h中,由于使用DWORD,显然需要从windows.h获取以下信息:

#pragma一次
#包括
类屏幕服务器;
类屏幕客户端
{
公众:
屏幕客户端(const屏幕服务器和服务器);
DWORD GetScreenHeight();
DWORD GetScreenWidth();
...
问题是,为什么我必须在Screen.h中包含windows.h,而我的“windows.cpp”在包含“Screen.h”之前已经包含了它?

简短回答:

因为不包含的其他文件可能包含Screen.h

再长一点:

一般来说,您应该始终在需要的地方包含所需的标题,而不是依赖于在其他地方包含这些标题。如果可能,请使用前向声明,但如果需要完整类型,请包含标题。

简短回答:

因为不包含的其他文件可能包含Screen.h

再长一点:


一般来说,您应该始终在需要的位置包含所需的标题,而不是依赖于它们被包含在其他位置。尽可能使用前向声明,但如果需要完整类型,则应包含标题。

Ah,这是因为cpp文件需要独立工作,而不是按任何加载顺序工作?@JamesT,cpp文件是独立编译的,因此是(批量生成除外)。在编写头文件时,我遵循的一个常见规则是,将其作为第一个头文件的cpp文件应该能够编译而不出现错误或警告。啊,这是因为cpp文件需要彼此独立工作,而不是以任何加载顺序工作?@JamesT通常,cpp文件是独立编译的,所以是的(批量生成除外)。在编写头文件时,我遵循的一个常见规则是,将其作为第一个头文件的cpp文件应该能够在没有错误或警告的情况下进行编译。另一个重要注意事项是,
windows.h
如果不是给定编译单元中的第一个头文件,则有时会出现问题。99.99%的情况下,它不会出现问题呃,但是每隔一段时间它就会出现问题,而且调试起来很糟糕谢谢大家的提醒!!!我把它作为第一个,这样我就不会有问题了!另一个重要的注意事项是,
windows.h
有时会出现问题,如果它不是给定编译单元中的第一个头文件。99.99%的时间都不重要,但每次都会出现问题过一会儿会的,谢谢你提醒我!!!我把它作为第一个,所以祈祷我不会有问题!
#pragma once

#include <windows.h>

class ScreenServer;

class ScreenClient
{
public:
    ScreenClient( const ScreenServer &server );

    DWORD GetScreenHeight();
    DWORD GetScreenWidth();
...