1

我有两个班级:ClassA 和 ClassB。ClassB 继承 ClassA。classa.cpp 和 classb.cpp 都包含一个 utility.h-header 文件,以便我可以使用该方法

round(double number, int precision)

来自两个 .cpp 文件中的实用程序.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;
 }
 }
4

1 回答 1

0

标题只是被解析,就好像它们被直接包含一样。因此,您最终会复制函数定义。

要解决此问题,请使用inline

inline double round(double number, int precision) {...}
于 2017-04-20T13:35:25.727 回答