不是万能的,但以下指南对我有很大帮助。
假设代码是由文件等MyClassXyz.cpp
与对应MyClassXyz.h
,每个源文件中的一个类,每CPP-文件应当包括其相应的头文件第一。也就是说,MyClassXyz.cpp
必须先从以下行:
// (possibly after comments)
#include "MyClassXyz.h"
这确保了MyClassXyz.h
包括必要为它编写所有头文件(或前向声明)。
我经常看到使用相反的约定码(#include
第一荷兰国际集团最一般的头文件),例如,MyClassXyz.cpp
开始与
#include <vector>
#include <iosfwd>
#include "blah.h"
#include "mytypes.h"
#include "MyClassXyz.h"
而且MyClassXyz.h
“云开门见山”使用已定义的东西附加头:
#pragma once
// "#include <vector>" missing - a hidden error!
// "#include <iosfwd>" missing - a hidden error!
class MyClassXyz
{
std::vector<int> v;
friend std::ostream& operator<<(...);
...
}
这枚编译OK,它给你描述的那种巨大的头痛,试图用类MyClassXyz
在其他一些源文件时。
你在写什么类型的代码,其中#include的*顺序*很重要? –
它是QT gui程序(源代码@ https://github.com/huggle/huggle3-qt-lx) – Petr
如果您需要重新排序,您可能会丢失标头警告或转发声明。或者你的头文件本身并不包括他们需要的东西(尽管试图减少这个前向decls) –