在继承 class 中使用相同的 .h 文件时出现 C++ 链接器错误

C++ linker error when using same .h-file in inherited class

我有两个类:A类和B类。 B类继承了A类。 classa.cpp 和 classb.cpp 都包含一个 utility.h 头文件,这样我就可以使用方法

round(double number, int precision)

来自两个 .cpp 文件中的 utilities.h。

像这样在ClassA中使用时:

double roundANumber(double number, int precision)
{
    return Utilities::round(number, precision);
}

它工作正常。但是当我尝试像这样在 ClassB 中使用它时:

double roundAnotherNumber(double number, int precision)
{
    return Utilities::round(number, precision);
}

链接器给我错误:

error LNK2005: "double __cdecl Utilities::round(double,int)" (?
round@hUtilities@@YANNH@Z) already defined in classa.obj

我似乎找不到原因。

提前致谢。

编辑:添加 Utilities.h 仅包含此

 #include <cmath>

 namespace MathUtilities {

 double round(double number, int precision) {
     int precisionFactor = std::pow(10, precision);
     return std::round(number * precisionFactor) / precisionFactor;
 }
 }

Headers 就像直接包含一样被解析。因此,您最终会复制函数定义。

要解决此问题,请使用 inline:

inline double round(double number, int precision) {...}