C ++文件中函数错误的多重定义

时间:2012-11-22 10:08:43

标签: c++ codeblocks

我在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"的其他课程中。任何建议出了什么问题以及如何摆脱这个错误。

1 个答案:

答案 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 ..
        };
    }
}