在继承 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) {...}
我有两个类: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) {...}