2016-08-08 19 views
-1

Ich schreibe ein Programm, das einen Funktionszeiger aufruft, der auf eine Funktion aus einer anderen Datei zeigt. Als ich das Programm kompilierte, erhielt ich eine Fehlermeldung vom Compiler, dass es einen erwarteten Ausdruck gab. Hier ist eine der vier Fehler erzeugt:Kompilierfehler beim Aufruf eines Funktionszeigers in C

error: expected expression 
(*get_num)(int *, int *); 

Der Compiler sagt, dass der Ausdruck zwischen den ( und den int erwartet wird. Derselbe Fehler wird für jeden der anderen drei Funktionszeigeraufrufe angezeigt. Rufe ich den Funktionszeiger richtig auf?

#include <stdio.h> 

int getnum(int items[], int *amount); 
int sortnum(int items[], int amount); 
int printnum(int items[], int amount); 
int searchnum(int items[], int amount); 

int (*get_num)(int *, int *); 
int (*sort_num)(int *, int); 
int (*print_num)(int *, int); 
int (*search_num)(int *, int); 

int main() 
{ 
    int items[maxitem]; 
    int amount; 

    get_num = getnum; 
    sort_num = sortnum; 
    print_num = printnum; 
    search_num = searchnum; 

    (*get_num)(int *, int *); 
    (*sort_num)(int, int); 
    (*print_num)(int, int); 
    (*search_num)(int, int); 
} 

Antwort

0

Wenn Sie eine Funktion aufrufen, müssen Sie geeignete Werte als Argumente angeben. Der Anruf

(*get_num)(int *, int *); 

tun Sie das nicht.

Verwenden

(*get_num)(items, &amount); 

oder besser lesbar:

get_num(items, &amount); 

Machen Sie ähnliche Änderungen für die anderen Anrufe.

(*sort_num)(items, amount); 
(*print_num)(items, amount); 
(*search_num)(items, amount); 
+0

Danke, das hat mir geholfen, die Fehlermeldungen loszuwerden. Jetzt aber, wenn ich das Programm kompiliere, gibt mir der Compiler folgende Nachricht: 'Nicht definierte Symbole für die Architektur x86_64:' Was bedeutet das und wie behebe ich es? –

+0

@JWu, haben Sie die Funktionen 'getnum',' printnum', 'sortnum' und' searchnum' definiert? –

+0

Ich habe die Funktionen in einer anderen Datei definiert ... –

Verwandte Themen