【发布时间】:2021-03-08 11:08:09
【问题描述】:
免责声明:这可能是一个基本问题,但我是一名理论物理学家,通过训练努力学习正确编码,所以请多多包涵。
假设我想为一个相当复杂的物理系统建模。在我的理解中,对这个系统进行建模的一种方法是将它作为一个类来引入。但是,由于涉及到系统,类会很大,可能包含许多数据成员、成员函数和子类。将主程序和此类放在一个文件中会非常混乱,因此为了更好地了解项目,我倾向于将类放在单独的 .h 文件中。这样我就会有类似的东西:
//main.cpp
#include "tmp.h"
int main()
{
myclass aclass;
aclass.myfunction();
return 0;
}
和
// tmp.h
class myclass
{
// data members
double foo;
double bar;
public:
// function members
double myfunction();
};
double myclass::myfunction()
{
return foo + bar;
}
然而,这相当于我的新编译器中的以下编译器警告:function definitions in header files can lead to ODR violations。那么我的问题是:处理这种情况的首选方法是什么?我想我可以将 tmp.h 变成 tmp.cpp,但据我所知,这是 .h 文件的预期用途?
【问题讨论】:
-
要么把
inline放在double myclass::myfunction()前面,要么把定义放在tmp.cpp中 -
令我惊讶的是,似乎没有明显的重复,尽管关于非成员函数也有类似的问题。但是,成员函数的规则略有不同,因此其他 Q 不是重复的。
标签: c++ one-definition-rule hfile