2017-04-20 5 views
1

クラスAとクラスBの2つのクラスがあります。 ClassBはClassAを継承します。私は両方の.cpp-ファイルでutilities.hから方法継承クラスで同じ.hファイルを使用するとC++リンカエラーが発生する

round(double number, int precision) 

を使用できるようにclassa.cppとclassb.cppの両方に含ま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

関連する問題