Oto moje polecenie:
Napisz funkcję get_function, która na podstawie typu operacji, przekazanego w parametrze, zwraca wskaźnik do funkcji wykonującej tę operację.
Zadeklaruj w tej funkcji tablicę wskaźników na funkcje (funcs) i przypisz do kolejnych komórek adresy poszczególnych funkcji.
Wychodzi mi taki błąd:
unit_test_v2.c:671:36: error: implicit declaration of function ‘get_function’ [-Werror=implicit-function-declaration]
test_error(NULL != get_function(op_add), "Wartość zwrócona przez funkcję calculate() jest niewłaściwa, powinien być wskaźnik na funkcję a jest NULL");
^
unit_helper_v2.h:29:11: note: in definition of macro ‘test_error’
if (!(__cond)) \
^~~~~~
unit_test_v2.c:671:33: error: comparison between pointer and integer [-Werror]
test_error(NULL != get_function(op_add), "Wartość zwrócona przez funkcję calculate() jest niewłaściwa, powinien być wskaźnik na funkcję a jest NULL");
^
unit_helper_v2.h:29:11: note: in definition of macro ‘test_error’
if (!(__cond)) \
^~~~~~
unit_test_v2.c:674:27: error: called object is not a function or function pointer
int res = get_function(op_add)(5, 2);
^~~~~~~~~~~~
Kod mam taki - plik z nagłówkiem h
enum operations_t
{
op_add=0,
op_sub
}
typedef int (*function_type)(int, int);
function_type getfunction(enum operations_t op );
int add_int(int a, int b);
int sub_int(int a, int b);
Oraz z nagłowkiem c:
function_type getfunction(enum operations_t op )
{
int (*funcs[])(int,int) = { &add_int, &sub_int};
if(op==op_add)
{
return *(funcs+op);
}
else if(op==op_sub)
{
return *(funcs+op);
}
else
return NULL;
}
Funkcje wywołuje(i tak musze w zadaniu) w następujący sposób:
if(operacyjka==0)
{
wynik=getfunction(op_add)(liczba1, liczba2);
}
Co tu jest nie tak?