gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:23:08 25 4
gpt4 key购买 nike

我将某个文件添加到我的 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" 将其包含在我的另一个类中。关于出了什么问题以及如何消除此错误的任何建议。

最佳答案

这两个:

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

或者,如果需要,您可以将它们内联到仅 header 中:

标题:

#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 ..
};
}
}

关于c++ - C++文件中函数错误的多重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13510264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com