在使用C++做项目时,要用到多个类。按照头文件和源码文件分开创建的形式,文件很多,而且在头文件和源码文件中跳来跳去很麻烦。另外,在引用头文件时,需要引用很多次,很繁琐。于是,参考一些大型库的做法,把源码整合到头文件中去。我使用的每个类体量都不是很大,于是决定采用这种方法,每个类只创建一个头文件,不要源码文件。
但是遇到一个问题,当把源码内容加入到头文件时,编译时总是出现重复定义问题。找了半天问题,终于通过inline 的形式,解决了问题。
在头文件中,用常规办法声明类的变量和方法。在类的外部,直接定义方法的源码内容。在每一个方法前面加上 inline 修饰字,使得编译器将函数的代码直接插入到调用该函数的地方,允许该函数在多个编译单元中重复存在,确保在多个源文件中都可以访问到该函数的定义。
我在qt中使用的一个类,示例如下
class Geometry : public QWidget
{
Q_OBJECT
public:
Geometry(QWidget *parent = 0);
~Geometry();
};
inline Geometry::Geometry(QWidget *parent) : QWidget(parent)
{
}
inline Geometry::~Geometry()
{
}
这样,我就把类的声明和定义整合到一个头文件中了。减少文件数量,提高编程效率。