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

发布于 2024-12-17 01:37:59 字数 828 浏览 1 评论 0原文

我正在尝试使用 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。

I'm trying to use D's equivalent of function pointer as a way of specifying optional functions as one field in a struct, of which I'm initializing an array of. This would be simple in C (aside from the messy syntax) but I'm stuck. This program:

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()  {
}

gives me these errors:

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)

I'm using dmd for D2 on a 64-bit Linux machine.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

阳光的暖冬 2024-12-24 01:37:59

在第 17 行,您使用的 boof 是一个不带参数的函数调用(D 允许没有括号)。您想要的是使用 & 运算符获取 boof 的引用。

On line 17, your use of boof is a function call with no parameters (D allows the absence of parens). What you want is to take the reference of boof with the & operator.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文