Hallo,
Warum musst Du denn unbedingt einen void *ptr;
in der inneren Struktur haben? Gänge nicht
ein void(*ptr)(); - das wäre ein Funktionszeiger,
wohinein sich Dein Funktonstyp standardgerecht
konvertieren ließe.
hab ich ausprobiert - jedoch ohne Erfolg… bekomme immer noch
die gleiche Fehlermeldung
void (*ptr)();
Fehlermeldung: nonstandard cast on lvalue
(short(*)(unsigned char *))pstruct->p->ptr =
funct;
Was ist dann (bei void (*ptr)() mit einem
simplen:
pstruct-\>p-\>ptr = funct;
Sogar gcc-4.3 warnt dann mit -pedantic nur
noch vor einem „assignment from incompatible pointer type“
erzeugt aber ein lauffähiges Programm.
Mir ist nicht ganz klar, was Du bezweckst.
Vielleicht könnte man das Ziel auf einfacher
erreichen?
Ausserdem kann man sich mit einen ‚typedef‘
das Leben erleichtern:
#include
#include
typedef short (\*FUNCPTR)(unsigned char \*pchar);
short funct (unsigned char \*pchar) { return pchar ? 1 : 0; }
struct Struct2 {
FUNCPTR ptr;
};
typedef struct {
struct Struct2 \*p;
} Struct1;
int main()
{
unsigned char \*pchar = (unsigned char\*)"TEXT";
Struct1 \*pstruct = (Struct1 \*) malloc( sizeof(Struct1) );
pstruct-\>p = (struct Struct2 \*) malloc( sizeof(struct Struct2) );
pstruct-\>p-\>ptr = funct;
if( pstruct-\>p-\>ptr(pchar) != 0 )
puts("returned != 0");
return 0;
}
Grüße
CMБ