Множественное определение перечисляемого класса 'classname' - PullRequest
0 голосов
/ 23 октября 2018

Я получаю ошибку:

error: multiple definition of 'enum class Color'

Я искал в Интернете (в том числе здесь), но не смог найти решение.Я пробовал много вещей, таких как удаление пространств имен в заголовочных файлах (все еще удаленных) или установка extern перед цветом (ошибка). Единственное, что, похоже, работало, это включало все в файле 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 голосов
/ 23 октября 2018

[Продолжение комментариев.]

Просто создайте файл заголовка для вашего 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 появится только один раз.

...