• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcja zwracająca wskaźnik na funkcje - dziwny błąd

VPS Starter Arubacloud
0 głosów
536 wizyt
pytanie zadane 20 maja 2020 w C i C++ przez fortuna Początkujący (310 p.)

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?

1
komentarz 20 maja 2020 przez overcq Pasjonat (21,540 p.)
Wywołujesz funkcję jako

getfunction

czy

get_function
komentarz 20 maja 2020 przez fortuna Początkujący (310 p.)

ojejku faktycznie, śmieszne niedopatrzenie, dzięki laugh

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
4 odpowiedzi 4,437 wizyt
pytanie zadane 4 kwietnia 2016 w C i C++ przez esp0x309 Użytkownik (510 p.)
0 głosów
2 odpowiedzi 739 wizyt
pytanie zadane 22 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 1,038 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...