2012-11-22 2 views
1

struct의 입력을 받아 struct의 결과를 반환하는 Code :: Blocks C++ 프로젝트에 특정 파일을 추가했습니다. 다음과 같이 파일에C++ 파일에서 함수 정의의 다중 정의

/src/Converter.h|23|multiple definition of `Converters::ColorConverters::RGB_to_HSV(Converters::ColorConverters::RGBColor)'| 

코드는 다음과 같습니다 :

#ifndef CONVERTERS_H 
#define CONVERTERS_H 

#define MIN3(x,y,z) ((y) <= (z) ? ((x) <= (y) ? (x):(y)) : ((x) <= (z) ? (x):(z))) 
#define MAX3(x,y,z) ((y) >= (z) ? ((x) >= (y) ? (x):(y)) : ((x) >= (z) ? (x):(z))) 

namespace Converters 
{ 
    namespace ColorConverters 
    { 
    struct RGBColor{ 
     float r,g,b; 
    }; 

    struct HSVColor{ 
     float hue, sat, val; 
    }; 
     struct HSVColor RGB_to_HSV(struct RGBColor rgb){ 
     } 
     struct RGBColor HSV_to_RGB(struct HSVColor hsv){ 
     } 
    } 
} 
#endif // CONVERTER_H 

을 그리고 #include "Converter.h" 내 다른 클래스의 하나로이 포함 나는 그 두 가지 기능을 추가 할 때, 나는 오류를 받기 시작. 어떤 오류가 발생하는지 제안하고이 오류를 제거하는 방법

+1

다른 곳에서도이 기능을 정의했습니다. Btw에서는 반환 유형 앞에'struct'를 생략 할 수 있습니다. –

답변

2

이들 모두 :

struct HSVColor RGB_to_HSV(struct RGBColor rgb) 
    { 
    } 
    struct RGBColor HSV_to_RGB(struct HSVColor hsv) 
    { 
    } 

는 헤더 파일에 정의되고있다. 그들에게 (위의 것과 같음)으로 선언되고 이 .cpp 소스 파일에으로 정의되기를 원합니다.

헤더 :

#ifndef CONVERTERS_H 
#define CONVERTERS_H 

#define MIN3(x,y,z) ((y) <= (z) ? ((x) <= (y) ? (x):(y)) : ((x) <= (z) ? (x):(z))) 
#define MAX3(x,y,z) ((y) >= (z) ? ((x) >= (y) ? (x):(y)) : ((x) >= (z) ? (x):(z))) 

namespace Converters 
{ 
    namespace ColorConverters 
    { 
     struct RGBColor{ 
      float r,g,b; 
     }; 

     struct HSVColor{ 
      float hue, sat, val; 
     }; 

     HSVColor RGB_to_HSV(RGBColor rgb); 
     RGBColor HSV_to_RGB(HSVColor hsv); 
    } 
} 

소스 :

헤더 :

Converters::ColorConverters::HSVColor 
Converters::ColorConverters::RGB_to_HSV(RGBColor rgb) 
{ 
    .. code here.. 
} 

Converters::ColorConverters::RGBColor 
Converters::ColorConverters::HSV_to_RGB(HSVColor hsv) 
{ 
    .. code here .. 
}; 

이 또는 당신이 원하는 헤더 경우에만 그들을 인라인 수

#ifndef CONVERTERS_H 
#define CONVERTERS_H 

#define MIN3(x,y,z) ((y) <= (z) ? ((x) <= (y) ? (x):(y)) : ((x) <= (z) ? (x):(z))) 
#define MAX3(x,y,z) ((y) >= (z) ? ((x) >= (y) ? (x):(y)) : ((x) >= (z) ? (x):(z))) 

namespace Converters 
{ 
    namespace ColorConverters 
    { 
     struct RGBColor{ 
      float r,g,b; 
     }; 

     struct HSVColor{ 
      float hue, sat, val; 
     }; 

     inline HSVColor RGB_to_HSV(RGBColor rgb) 
     { 
      .. code here .. 
     }; 

     inline RGBColor HSV_to_RGB(HSVColor hsv) 
     { 
      .. code here .. 
     }; 
    } 
} 
+0

그 중 하나를'inline'으로 만들어라. – Kos

+0

@Kos 그게 당신이 그것을 읽지 않으려는 경우에 대비하여, 대답의 맨 아래에있을 것입니다. – WhozCraig

+0

EOF를 눌렀으므로 중단되었습니다. 내가 해설했을 때 그것은 조금 더 짧았다. – Kos