2017-04-20 3 views
1

클래스 A와 클래스 B의 두 클래스가 있습니다. ClassB는 ClassA를 상속받습니다. 나는 두 통화 당 - 파일의 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

관련 문제