在继承类中使用同一文件时,C 链接器错误

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

本文关键字:链接 错误 文件 继承      更新时间:2023-10-16

我有两个类:classa和classB。ClassB继承了班级。classa.cpp和classb.cpp都包含一个效用。

round(double number, int precision)

来自两个.cpp-files中的Utilities.h。

在这样的班级中使用它时:

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

它可以正常工作。但是,当我尝试在这样的班级中使用它时:

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

标题仅被解析,好像它们被直接包含在内。因此,您最终重复了功能定义。

要解决此问题,请使用inline

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