2012-11-22 52 views
1

我添加了一個特定的文件我的代碼:: Blocks的C++項目,它需要一個struct的輸入,並返回struct輸出。然而,當我加入這兩個函數,我開始越來越錯誤:多個定義

/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

您在其他位置定義了此功能。順便說一句,你可以在返回類型之前省略'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

要麼或者讓他們'內聯'。 – Kos

+0

@Kos這將是答案的底部,以防你停止閱讀。 – WhozCraig

+0

我因爲打EOF而停了下來;當我評論時,它有點短了。 – Kos