#c #enums
#c #перечисления
Вопрос:
У меня есть большое количество файлов в моей базе кода. Я пытаюсь скомпилировать свою базу кода, используя другую библиотеку, в которой есть один файл a.h. Я сталкиваюсь с проблемой компиляции, если я включаю, скажем, файл.h в свою базу кода, который уже определил некоторые значения с тем же перечислением, что и в a.h. Например:
в заголовочном файле «a.h»
typedef enum mylist_s
{
FIRST,
SECOND,
THIRD,
FOUR,
::::::
} mylist_e;
в другом файле .cxx, как показано ниже (если он имеет определение, такое же, как определено в mylist)
static const char FIRST = 1;
Я понимаю, что снова есть определение той же переменной.
Я не хочу менять свою кодовую базу с помощью новой переменной.
Кроме того, поскольку a.h включен как в .c, так и в .cxx-файл, я не могу использовать пространство имен для инкапсуляции его с другим именем.
Я также не хочу менять имя в файле.h. Есть ли какой-либо другой способ справиться с этой ситуацией без изменения имени значения перечисления.
Заранее спасибо
Комментарии:
1. Для этого
namespace
и были изобретены. Вы можете обернутьFIRST = 1
в одно.2. поместите весь ваш код в пространство имен
3. Я не могу использовать пространство имен, поскольку файл «a.h» также включен в файлы .c. Может быть, нам нужно искать эквивалент пространства имен в .c
4. Вы не следуете. Вы используете nemspace в своих
cxx
файлах, а не заголовок, который вы не можете изменить.5. Кстати, у вас также есть возможность размещать
#include
директивы внутри пространства имен..
Ответ №1:
C namepsace
предназначены для предотвращения возникновения конфликтов имен.
Определение всего вашего кода реализации внутри пользовательского пространства имен должно решить проблему.
Ответ №2:
Я использовал для решения той же проблемы, что и упомянутая ниже:
struct mylist_s
{
enum Type
{
FIRST,
SECOND,
THIRD,
FOUR
};
};
typedef mylist_s::Type mylist_e;