我有两个类: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;
}
}
答案 0 :(得分:0)
标题只是被解析,好像它们是直接包含的一样。因此,您最终会复制函数定义。
要解决此问题,请使用inline
:
inline double round(double number, int precision) {...}