Ситуация следующая...
В test.cpp Подключаем файл user.h
#include <sys/user.h>при компиляции "gcc test.cpp -lkvm"
выдается ошибка
/usr/include/vm/vm_map.h: In function `int _vm_map_lock_upgrade(vm_map *, proc *)':
/usr/include/vm/vm_map.h:273: ANSI C++ forbids implicit conversion from `void *' in argument passing
*** Error code 1ошибку выдает на строке (файл /usr/include/vm/vm_map.h)
error = lockmgr(&map->lock, LK_EXCLUPGRADE, (void *)0, p);по всей видимости ей не нравиться (void *)0
ежели файл переименовать в test.c - то ошибок нет.
очевидно данное происходит из-за разницы компилирования между С и С++.
Но мне нужно именно С++.. уже написанно несколько нужных класов, и переписывать на си очень бы не хотелось..Кто-нибудь подскажите, какие могут быть варианты это исправить.. ( очень не хотелось бы править файл /usr/include/vm/vm_map.h)
g++ пробовал пользовать ?
C g++ та же фигня... ровно такаяже ошибка
А зачем вообще этот (void*) тут нужен?
IMHO нуля вполне достаточно.
Юра.
Вот именно но как-то не очень хочется править системный инклудный файл...
Ну, не знаю... У меня ошибок никаких не выдается.
Другое дело, что у меня gcc ругается на ключики -lkvm
Попробуйте вставить в опции
-fpermissive
Проблема проистекает из того, что хэдер сишный, а файл, в который он включается, зовется test.cpp. Как известно, в C++ правила построже. Дабы gcc/g++/egcs/как его еще там наплевал на правила, есть эта вредно-полезная опция.
extern "C" {
include <sys/user.h>
}