Я испытываю затруднения при написании кода C++, который использует заголовочный файл, разработанный для файла C. В частности, заголовочный файл использовал имя переменной, названное классом:
int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_class, BPY_class_attr_check* class_attrs, PyObject **py_class_attrs);
Это работает в C, поскольку урок не посещается как ключевое слово, но в C++, класс. Так есть ли так или иначе, я могу #include этот заголовочный файл в файл C++ или являюсь мной не повезло?
Спасибо.
попробуйте что-то вроде этого:
#define class class_variable
// if class is only used in declarations, you can also do
// #define class
#include "c.h"
#undef class
это может вызвать проблемы, но, возможно, стоит сделать альтернативу
(используя Makefile):
python_.hpp: /usr/include/python.h
perl -pe 's/\Wclass\W//g' $< > $@
...
#include "python_.hpp"
Если это только объявление, тогда имена переменных не имеют значения. Вы можете полностью удалить их или изменить по своему усмотрению. Это связано с тем, что объявление просто определяет имя и тип функции, а именно:
int BPY_class_validate(const char *, PyObject *, PyObject *,
BPY_class_attr_check*, PyObject **);
Но если вы хотите, чтобы имена (были немного более информативными), вы можете просто поставить подчеркивание в конце того, что у вас есть:
int BPY_class_validate(const char *class_type, PyObject *class_,
PyObject *base_class, BPY_class_attr_check* class_attrs,
PyObject **py_class_attrs);
Это не нарушит никакой другой код.
С практической точки зрения, вам не повезло. "class" - это зарезервированное слово , вы не можете использовать его в качестве идентификатора переменной.
Я полагаю, вы могли бы проделывать трюки с препроцессором, вроде
#define class othername
Но на самом деле это тоже глупо, потому что это запутает ваш код и помешает вам использовать настоящие классы.
Просто прикусите пулю и переименуйте параметр в «класс» или что-то в этом роде.
Вы всегда можете использовать #ifdef __cplusplus
, чтобы создать объявление, специфичное для C ++, в этом заголовке
Вам нужно будет изменить заголовок, чтобы заменить 'class' чем-то другим, чтобы скомпилировать его как C++.