Решение для приведения и преобразования указателей Обновление C до C ++ - PullRequest
1 голос
/ 12 января 2012

Я изменяю исходный файл C (libape-spidermonkey.c). Я включил заголовочный файл lib, который использует некоторые функции C ++ (например, class definitions, STL string vector), поэтому мне нужно скомпилировать libape-spidermonkey.c, используя g++ вместо gcc.

Однако из-за проверки типов в C ++ я получил много ошибок (НЕ предупреждений):

libape-spidermonkey.c: In function ‘JSBool ape_sm_raw_constructor(JSContext*, JSObject*, uintN, jsval*, jsval*)’:
libape-spidermonkey.c:2217:1: error: invalid conversion from ‘void*’ to ‘ape_sm_compiled*’
libape-spidermonkey.c: In function ‘JSBool ape_sm_sockclient_constructor(JSContext*, JSObject*, uintN,
libape-spidermonkey.c:2231:1: error: invalid conversion from ‘void*’ to ‘ape_sm_compiled*’
libape-spidermonkey.c:2244:38: error: invalid conversion from ‘void*’ to ‘_ape_sock_js_obj*’
libape-spidermonkey.c:2248:53: error: invalid conversion from ‘void*’ to ‘_ape_sock_callbacks*’
libape-spidermonkey.c:2257:36: error: invalid conversion from ‘void*’ to ‘ape_socket*’
libape-spidermonkey.c: In function ‘JSBool ape_sm_pipe_constructor(JSContext*, JSObject*, uintN, jsval*
libape-spidermonkey.c:2281:1: error: invalid conversion from ‘void*’ to ‘ape_sm_compiled*’
libape-spidermonkey.c: In function ‘JSBool ape_sm_sockserver_constructor(JSContext*, JSObject*, uintN,
libape-spidermonkey.c:2585:1: error: invalid conversion from ‘void*’ to ‘ape_sm_compiled*’
libape-spidermonkey.c: In function ‘JSBool ape_sm_xorize(JSContext*, JSObject*, uintN, jsval*, jsval*)’
libape-spidermonkey.c:2632:1: error: invalid conversion from ‘void*’ to ‘ape_sm_compiled*’
libape-spidermonkey.c:2646:31: warning: comparison between signed and unsigned integer expressions
libape-spidermonkey.c:2650:36: error: invalid conversion from ‘void*’ to ‘char*’

Есть ли простой способ решить эту проблему? Как какая-то макро-магия?

Спасибо.

Peter

Ответы [ 2 ]

4 голосов
/ 12 января 2012

Скомпилируйте этот файл как файл C, а не файл C ++. Объекты C и C ++ могут быть связаны друг с другом без проблем.

1 голос
/ 13 января 2012

Хорошей практикой (даже для разработчиков на C) является попытка компилировать их C-коды с использованием компилятора C ++. Ошибки, обнаруженные компилятором C ++, помогут вам улучшить качество кода.

Поэтому я бы порекомендовал вам исправить ошибки в вашем libape-spidermonkey.c с помощью приведения в стиле C (а не C ++ static_casts). Это гарантирует, что ваш код все еще будет компилироваться в компиляторах C, если вам это понадобится в будущем.

...