2009-11-15 2 views
11

У меня есть программа C под названием opencv2.0 функция:"ошибка: слишком мало аргументов, чтобы функционировать"

cvSaveImage(out_img_name, img); 
отчеты

Компилятор GCC, что

too few arguments to function cvSaveImage

Прототип cvSaveImage в highgui.h является

CVAPI(int) cvSaveImage(const char* filename, const CvArr* image, const int* params CV_DEFAULT(0))

После того как я изменить мой призыв быть

cvSaveImage(out_img_name, img, 0); 

Компиляция окончательно успешна. Означает ли это, что значения по умолчанию для аргументов функции поддерживаются только в C++, но не C?

Спасибо и приветствую!

+0

Я предполагаю, что это просто происходит в новых версиях opencv, я не получил эту ошибку со старой версией, доступной в репозиториях ubuntu, но когда я скомпилировал новую версию, код, который использовался для запуска, дал мне ошибку, talk about – 2010-06-19 13:27:54

ответ

15

Правильный - стандарт C не поддерживает аргументы по умолчанию, ни в стандарте C89, ни в стандарте C99 (а также в стандарте C2011). В некоторых компиляторах могут существовать расширения для компилятора, но они не являются стандартными.

+0

Я писал свои C-программы, используя шаблоны проектов, доступные для языка C++ в Visual Studio. Некоторое время я продолжал писать его, и как только я включил параметр «Свойства конфигурации -> C/C++ -> Дополнительно -> Скомпилировать как' для компиляции в виде кода C (/ TC), мой код 'get_s' начал бросать ошибка, упомянутая в этой теме. Затем я должен был явно передать целочисленные значения в качестве второго аргумента 'get_s', чтобы сделать его компилируемым. – RBT

2

C требует специального обозначения, если вы хотите использовать переменное количество аргументов.

http://www.swig.org/Doc1.3/Varargs.html

Вы не можете определить переменную по умолчанию, который будет передан в к обычной функции. Вы можете настроить макрос, который автоматически магически передает значение по умолчанию, и использовать его как свою запись функции, если хотите.

Смежные вопросы