在继承的类

时间:2017-04-20 13:31:29

标签: c++ linker linker-errors lnk2005 inherited

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

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;
 }
 }

1 个答案:

答案 0 :(得分:0)

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

要解决此问题,请使用inline

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