什么“错误:'myfn'声明为函数返回函数”是什么意思?

时间:2013-09-12 20:03:10

标签: c++ c function-pointers

我正在尝试编写一个返回函数指针的函数。这是我的最小例子:

void (*myfn)(int)()  // Doesn't work: supposed to be a function called myfn
{                    // that returns a pointer to a function returning void
}                    // and taking an int argument.

当我用g++ myfn.cpp编译它时会打印出这个错误:

myfn.cpp:1:19: error: ‘myfn’ declared as function returning a function
myfn.cpp:1:19: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]

这是否意味着我不允许返回函数指针?

1 个答案:

答案 0 :(得分:9)

您可以返回一个函数指针,正确的语法如下所示:

void (*myfn())(int)
{
}

完整示例:

#include <cstdio>

void retfn(int) {
    printf( "retfn\n" );
}

void (*callfn())(int) {
    printf( "callfn\n" );
    return retfn;
}

int main() {
    callfn()(1); // Get back retfn and call it immediately
}

编译并运行如下:

$ g++ myfn.cpp && ./a.out
callfn
retfn

如果有人对g ++的错误消息显示为什么这是不可能的有一个很好的解释,我会有兴趣听到它。