fpek = (char*) skapa_nyckel_alt1;
Här ovanför försöker du casta funktionen till en char-pekare och sen tilldela fpek det värdet.
fpek = skapa_nyckel_alt1;
Borde fungera utmärkt. :)
Ett litet tips: http://www.function-pointer.org/ ;) :bire
6 svar · 336 visningar · startad av Mattias
Jag har problem med att låta en pekare peka på en funktion i C. Har skrivit nedanstående kod som känns rätt, men uppenbarligen är den inte det eftersom jag (vid kompilering) får felmeddelandet: "warning: assignment from incompatible pointer type" på raden där pekaren tilldelas funktionen (se nedan).
// relevanta delar av funktionen
char *skapa_nyckel_alt1(int index, struct film arr[]){
char *nyckel_pek;
...
return nyckel_pek;
...
}
// pekardeklartion
char (*fpek)(int, struct film);
// pekaren tilldelas funktionen (raden med felmeddelandet)
fpek = (char*) skapa_nyckel_alt1;
Någon som kan vägleda mig hur man går tillväga för att låta pekaren peka till funktionen?
fpek = (char*) skapa_nyckel_alt1;
Här ovanför försöker du casta funktionen till en char-pekare och sen tilldela fpek det värdet.
fpek = skapa_nyckel_alt1;
Borde fungera utmärkt. :)
Ett litet tips: http://www.function-pointer.org/ ;) :bire
Nej, det fungerar inte. Känns som jag testat alla kombinationer av stjärnor här och där på den raden. ;) Misstänker att det är nåt fel i själva deklarationen av fpek-pekaren. Funktionen returnerar ju ingen char, utan en _pekare_ till en char. Men mitt chansningsrace har inte heller gett nån utdelning på deklartionsraden. ;)
Ahh.. Sorry.
Det här borde fungera:
// pekardeklaration
char* (*fpek)(int, struct film);
fpek = skapa_nyckel_alt1;
:)
Nej, tyvärr fick jag återigen "warning: assignment from incompatible pointer type" på raden:
fpek = skapa_nyckel_alt1;
Hmm... Konstigt. Det fungerar utmärkt för mig. Visual Studio 6.0 SP3
#include <stdio.h>
#include <stdlib.h>
// relevanta delar av funktionen
char *skapa_nyckel_alt1(char character)
{
char *nyckel_pek = (char *)malloc(sizeof(char));
*nyckel_pek = character;
return nyckel_pek;
}
int main(void)
{
char *foo;
char* (*fpek)(char);
fpek = skapa_nyckel_alt1;
foo = fpek('A');
printf("\n%c\n", *foo);
free(foo);
return 0;
}
Problemet är löst! Felet låg i pekardeklarationen. Istället för:
char* (*fpek)(int, struct film);
...skrev jag:
char* (*fpek)(int, struct film[]);
Det var alltså hakparentesen efter film som jag missat Slarvigt. Tack för vägledningen, Phorpher!