我在Code :: 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"
的其他课程中。任何建议出了什么问题以及如何摆脱这个错误。
答案 0 :(得分: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 ..
};
}
}