Прямое объявление перечисления в C++, определенного в C ⇐ C++
-
Гость
Прямое объявление перечисления в C++, определенного в C
Я искал предварительные объявления и не нашел способа заставить мою ситуацию работать. Итак, вот оно:
1) Имеется файл C-header. Это, так сказать, интерфейс экспорта для большого многокомпонентного программного обеспечения, содержащего определение типа перечисления
"export.h":
// Это на "C"! typedef enum _VM_TYPE {...., ...., ...,} VM_TYPE; 2) Часть кода на C++ использует этот экспорт.
"cpp_code.cpp":
// Это на C++ #include "export.h" #include "cpp_header.hpp" { .... использование значений VM_TYPE для выполнения каких-либо действий....} "cpp_header.hpp":
// Мне нужно как-то переслать сюда объявление VM_TYPE, но как? Структура VM_INFO { .... VM_TYPE VТип; // Мне нужно добавить это перечисление в структуру .... }; Совершенно очевидно, что проблема в файле cpp_head.hpp, поскольку он не знает о перечислении.
Я попробовал добавить в cpp_header.hpp:
typedef enum _VM_TYPE VM_TYPE; И это действительно сработает. Так почему же это работает? Это потому, что у него синтаксис в стиле C?! В любом случае, вышестоящее «руководство» посоветовало мне не делать этого («здесь C++, а не C»).
Есть ли другой способ заставить это работать вообще, исходя из того, как все связано в настоящее время? Они не хотят изменять/добавлять включаемые файлы; «Класс перечисления» предназначен только для C++, верно? Добавление просто «enum VM_TYPE» в cpp_header.hpp приведет к ошибке переопределения.
Что я могу сделать?
Я искал предварительные объявления и не нашел способа заставить мою ситуацию работать. Итак, вот оно:
1) Имеется файл C-header. Это, так сказать, интерфейс экспорта для большого многокомпонентного программного обеспечения, содержащего определение типа перечисления
"export.h":
// Это на "C"! typedef enum _VM_TYPE {...., ...., ...,} VM_TYPE; 2) Часть кода на C++ использует этот экспорт.
"cpp_code.cpp":
// Это на C++ #include "export.h" #include "cpp_header.hpp" { .... использование значений VM_TYPE для выполнения каких-либо действий....} "cpp_header.hpp":
// Мне нужно как-то переслать сюда объявление VM_TYPE, но как? Структура VM_INFO { .... VM_TYPE VТип; // Мне нужно добавить это перечисление в структуру .... }; Совершенно очевидно, что проблема в файле cpp_head.hpp, поскольку он не знает о перечислении.
Я попробовал добавить в cpp_header.hpp:
typedef enum _VM_TYPE VM_TYPE; И это действительно сработает. Так почему же это работает? Это потому, что у него синтаксис в стиле C?! В любом случае, вышестоящее «руководство» посоветовало мне не делать этого («здесь C++, а не C»).
Есть ли другой способ заставить это работать вообще, исходя из того, как все связано в настоящее время? Они не хотят изменять/добавлять включаемые файлы; «Класс перечисления» предназначен только для C++, верно? Добавление просто «enum VM_TYPE» в cpp_header.hpp приведет к ошибке переопределения.
Что я могу сделать?
Мобильная версия