基本ODR违规:.h文件中的成员函数

免责声明:这可能是一个基本问题,但我是一名理论物理学家,通过训练试图学习正确编码,所以请耐心等待。

假设我想模拟一个相当复杂的物理系统。在我的理解中,对这个系统建模的一种方法是将它作为一个类来介绍。但是,由于涉及系统,类会很大,可能有很多数据成员、成员函数和子类。将主程序和这个类放在一个文件中会非常混乱,所以为了更好地概述项目,我倾向于将这个类放在一个单独的 .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 文件的预期用途?

回答

通常,类定义在“.h”文件中,其成员函数的定义在“.cpp”文件中。

如果你想在头文件中定义成员函数,你需要声明它们inline,或者将它们写在类定义中(这使得它们隐式内联)。


以上是基本ODR违规:.h文件中的成员函数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>