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。
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在第 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.