Ellery Newcomer , dans le message (digitalmars.D.learn:29885), a écrit : > weird error. anyone know what's going on? > > [ellery@localhost d]$ cat test.d > extern(C) int puts(const char *s); > class X{ > @property void tt(int function(const char *) xz){ > } > } > void main(){ > X x = new X(); > x.tt = &puts; > } > [ellery@localhost d]$ dmd test > test.d(8): Error: function test.X.tt (int function(const const(char*)) > xz) is not callable using argument types (int C function(const > const(char*) s)) > test.d(8): Error: cannot implicitly convert expression (& puts) of type > int C function(const const(char*) s) to int function(const const(char*))
The compiler is actually quite explicit: puts is a C function, and X.tt expects a normal D function. You can solve your problem with a wrapper. Try: int cPuts(const char* s) { return puts(s); } and then : x.tt = &cPuts(); By the way, it is not very d-ish to use an "int function(const char*)". we prefer: "int delegate(const char[])". And then: | int cPuts(const char[] s) { return puts(toStringz(s)); } But it depends on what you exactly are trying to do. toStringz can be found in std.string. -- Christophe