1

我在我的 Code::Blocks C++ 项目中添加了一个特定文件,该文件接受 a 的输入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"。任何建议出了什么问题以及如何摆脱这个错误。

4

1 回答 1

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 ..
        };
    }
}
于 2012-11-22T10:12:52.933 回答