【发布时间】:2011-07-30 09:18:31
【问题描述】:
我是编程新手,在我开始使用很多头文件后,头文件的话题让我有些不知所措。除此之外,我正在尝试使用预编译的标头。我也在使用 SFML 库,所以我有那些也必须包含在内的标题。
现在我有 stdafx.h、main.cpp,然后是 Ah、A.cpp、Bh、B.cpp、Ch、C.cpp、Dh 和 D 中包含的 A、B、C 和 D 类。 cpp.
如果
- 所有类都包含一个 SFML 类的实例
- D 类包含 A 类和 C 类的实例
- C 类包含 B 类的实例 我的代码:(注意:所有标题都有标题保护)
stdafx.h:
#include <SFML/Graphics.hpp>
#include <iostream>
啊.h
#include "stdafx.h"
class A
{
//sfml class
};
A.cpp
#include "stdafx.h"
#include "A.h"
B.h
#include "stdafx.h"
class B
{
//sfml class
};
B.cpp
#include "stdafx.h"
#include "B.h"
C.h
#include "B.h"
class C: public B
{
};
C.cpp
#include "stdafx.h"
#include "C.h"
D.h
#include "A.h"
#include "C.h"
class D
{
A a;
C C; // if left uncommented I recieve a '1 unresolved externals' error
//sfml class
}
D.cpp
#include "stdafx.h"
#include "D.h"
main.cpp
#include "stdafx.h"
#include "D.h"
【问题讨论】:
-
main.cpp是否使用A,B,C,D的任何类? -
有时这样想是有帮助的:当预处理器遍历你的文件时,它会将所有包含的头文件和cpp源文件放在一个大文件中,然后编译它。因此,将您的程序想象成一个大文件,然后考虑什么对顺序有意义。
-
我通常按字母顺序按类别从高级到低级包含它们:核心(即标准)、平台(例如 Qt、Windows)、第 3 方库,然后是我的程序。使用包含守卫,顺序无关紧要,但是这样做可以更容易地查看那里有什么,以及在我使用类时是否需要添加一些东西。我也总是包含文件中使用的所有内容,即使我知道它包含在某处的标题中:标题可以更改,即使不经常发生,这使我的意图更清晰。
标签: c++ class header include precompiled