枚举类'classname'

时间:2018-10-23 19:44:03

标签: c++ linker-errors

我得到的错误是。

error: multiple definition of 'enum class Color'

我搜索了互联网(包括此处),但找不到解决方案。 我尝试了很多操作,例如删除头文件中的命名空间(仍删除)或将extern放在color之前(给出错误)。似乎唯一可行的方法是将ComposedShape文件中的所有内容都包含在内,并将每个文件中的ComposedShape.h包含在内,但是类以某种方式发生冲突。但是我知道的是标头后卫应该阻止这种情况,所以我编写了此版本的代码。 我的文件就是这样。

--Circle.h--
#ifndef _HW2_CIRCLE_H
#define _HW2_CIRCLE_H
enum class Color{G,R};

...
#endif

--Triangle.h--
#ifndef _HW2_TRI_H
#define _HW2_TRI_H
enum class Color{G,R};

...
#endif

--Rectangle.h--
#ifndef _HW2_RECT_H
#define _HW2_RECT_H
enum class Color{G,R};
...
#endif

--ComposedShapes.h--
#ifndef _HW2_CS_H
#define _HW2_CS_H

...
#endif

--main.cpp--
#inlude "ComposedShapes.h"

以及所有这些文件的cpp文件 它给出了错误

1 个答案:

答案 0 :(得分:0)

[继续评论。]

只需为您的enum class创建一个头文件:

--Color.h--
#ifndef _HW2_COLOR_H
#define _HW2_COLOR_H
enum class Color{G,R};
#endif

并在您需要的任何地方添加它,例如:

--Triangle.h--
#ifndef _HW2_TRI_H
#define _HW2_TRI_H

#include "Color.h"
...
#endif

这样,如果您多次包含Color.h,则Color的定义将只出现一次。