2009-11-15 19 views
11

Mam program C nazwie opencv2.0 funkcja:"błąd: zbyt mało argumentów funkcjonować"

cvSaveImage(out_img_name, img); 
raporty

kompilator gcc że

too few arguments to function cvSaveImage

Prototyp cvSaveImage w highgui.h jest

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

Po zmienić moje wezwanie być

cvSaveImage(out_img_name, img, 0); 

Kompilacja powiodła się. Czy to znaczy, że wartości domyślne argumentów dla funkcji są obsługiwane tylko w C++, ale nie C?

Dzięki i pozdrawiam!

+0

Domyślam się, że tak się dzieje w nowych wersjach opencv, nie dostałem tego błędu ze starą wersją dostępną na repozytoriach ubuntu, ale kiedy skompilowałem nową wersję, kod, który był używany uruchomił mi błąd mówienie o –

Odpowiedz

15

Prawidłowo - Standard C nie obsługuje domyślnych argumentów, ani w standardzie C89, ani w standardzie C99 (ani w standardzie C2011). W niektórych kompilatorach mogą istnieć rozszerzenia specyficzne dla kompilatorów, ale nie jest to standard.

+0

Piszę moje programy C używając szablonów projektów dostępnych dla języka C++ w Visual Studio. Przez jakiś czas pisałem go i od razu włączyłem ustawienie "Właściwości konfiguracji -> C/C++ -> Zaawansowane -> Skompiluj jako" "Kompiluj jako kod C (/ TC)" mój kod 'gets_s' zaczął rzucać błąd wymieniony w tym wątku. Następnie musiałem jawnie przekazać wartości całkowite jako drugi argument 'get_s', aby uczynić go kompilowanym. – RBT

2

C wymaga specjalnej notacji, jeśli chcesz użyć zmiennej liczby argumentów.

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

Nie można zdefiniować domyślną zmienną zostać przekazany do zwykłej funkcji. Możesz ustawić makro, które automatycznie przechodzi w wartość domyślną i użyć go jako wpisu funkcji, jeśli chcesz.

Powiązane problemy