2017-04-20 54 views
1

我有兩個類:ClassA和ClassB。 ClassB繼承了ClassA。還有包括雙方classa.cpp和classb.cpp,這樣我可以從兩個的.cpp - 文件utilities.h使用的方法在繼承類中使用相同的.h文件時出現C++鏈接器錯誤

round(double number, int precision) 

一個utility.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)" (? 
[email protected]@@[email protected]) 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

頭部只是解析爲,如果他們直接計入。因此,您最終會複製函數定義。

爲了解決這個問題,使用inline

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

謝謝!這解決了我的問題。 – Canna

相關問題