Например, мы следующие исходные файлы:Redefenition из ЬурейеЕ перечисления
types.h:
#pragma once
typedef enum { RED, GREEN, BLUE } myColorSet;
whatever.h:
#pragma once
myColorSet getColor(int args[]);
whatever.cpp
#include "whatever.h"
#include "types.h"
myColorSet getColor(int args[]) {
//returning the color according to args
}
Составление этих бросков:
'myColorset': redefinition; символ не может быть перегружен с помощью typedef. См. Объявление «myColorset».
Это немного запутанным для меня, но кажется, что составитель считает, что
myColorSet getColor(...);
из whatever.h является декларация о myColorSet
. Я хочу использовать myColorSet
в качестве возвращаемого типа в функции getColor
. Я что-то упускаю?
Кроме того, когда я включаю «types.h» в what.h (вместо what.cpp), он отлично работает. Но насколько я знаю, лучше избегать включения в .h файлов.
Должен ли я просто включить include в what.h или есть другой (правильный?) Способ? Спасибо.
Вы не включаете 'types.h' в' whatever.h', потому что ...?Не делайте файлы заголовков зависящими от сети на основе .cpp-файла, в который они включены. Это ужасная привычка. Потребитель 'what.h' ожидает, что он принесет то, что ему нужно для единицы перевода. Тот, кто сказал вам «лучше не включать в .h файлы», должен быть помещен в список «не слушайте их». – WhozCraig