与D相当于函数指针的编译器错误

时间:2011-11-18 21:31:48

标签: function-pointers syntax-error d

我正在尝试使用D等效的函数指针作为将可选函数指定为结构中的一个字段的方法,我正在初始化一个数组。这在C中很简单(除了凌乱的语法)但是我被卡住了。这个计划:

struct Foo {
    ubyte code;
    bool yup;
    void function(ubyte[] data,  int size) special;
} 

void boof(ubyte[] data, int size)   {
    /*do something*/
}

static immutable Foo[] markdefs = [
  {0xF2,  true,   null},
  {0xE4,  true,   boof},
  {0xEE,  false,  null}
];

void main()  {
}

给了我这些错误:

funptr.d(17): Error: function funptr.boof (ubyte[] data, int size) is not 
callable using  argument types ()
funptr.d(17): Error: expected 2 function arguments, not 0
funptr.d(17):        called from here: boof()
funptr.d(17): Error: cannot implicitly convert expression (boof()) of type 
void to void function(ubyte[] data, int size)

我在64位Linux机器上使用dmd for D2。

1 个答案:

答案 0 :(得分:4)

在第17行,你使用 boof 是一个没有参数的函数调用(D允许没有parens)。你想要的是使用& 运算符来引用 boof