考虑 WinAPI 中的这个类:
typedef struct tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
我在一个名为的类中对其进行了增强,该类Rect
允许您乘/加/减/比较两个Rect
s,以及其他功能。我需要我的Rect
班级了解的唯一真正原因RECT
是因为该班级具有转换运算符,允许将 aRect
作为 a 传递RECT
,并分配给 a RECT
。
但是,在文件Rect.h
中,我不想包含<Windows.h>
,我只想包含<Windows.h>
在源文件中,这样我可以保持我的包含树很小。
我知道可以像这样前向声明结构:struct MyStruct;
但是,结构的实际名称是tagRECT
并且它有一个对象列表,所以我对如何前向声明它有点困惑。这是我的课的一部分:
// Forward declare RECT here.
class Rect {
public:
int X, Y, Width, Height;
Rect(void);
Rect(int x, int y, int w, int h);
Rect(const RECT& rc);
//! RECT to Rect assignment.
Rect& operator = (const RECT& other);
//! Rect to RECT conversion.
operator RECT() const;
/* ------------ Comparison Operators ------------ */
Rect& operator < (const Rect& other);
Rect& operator > (const Rect& other);
Rect& operator <= (const Rect& other);
Rect& operator >= (const Rect& other);
Rect& operator == (const Rect& other);
Rect& operator != (const Rect& other);
};
这有效吗?
// Forward declaration
struct RECT;
我的想法是否定的,因为RECT
它只是tagRECT
. 我的意思是,如果我这样做,我知道头文件仍然有效,但是当我创建源文件Rect.cpp
并包含<Windows.h>
在其中时,我担心这就是我会遇到问题的地方。
我怎么能转发声明RECT
?