0

如果我做:

void foo() {
    if( .. ) {
      inline int baa(..) { return .. }
    } else {
      inline int baa(..) { return .. }
    }

}

并调用:我得到的baa(..)内部foo函数implicit declaration of 'baa'。但是如果我做原型声明:inline int baa(int);错误是inline function 'baa' declared but never defined. 我正在使用内联函数来替换宏函数。

如何解决这个问题?

编辑 得更好:有人可以解释为什么编译器声称上述错误消息吗?

4

3 回答 3

4

我正在使用内联函数来替换宏函数。

你不能在函数内部定义函数,你只能声明它们。声明它们会使它们的名称在该范围内可见,但这些函数仍然需要在某个地方定义,而且我们知道我们不能在另一个函数中定义它们。这就是编译器说该函数已声明但从未定义的原因。

相反,只需在全局范围内声明您的函数。inline

于 2012-06-14T03:19:14.093 回答
1

虽然它不是标准的一部分,但您可以使用标志进行编译-fnested-functions

于 2012-06-14T03:21:59.300 回答
1

K-ballo的建议确实看起来最好,但他并没有真正指出问题所在。

在块中定义的嵌套函数仅在块内有效。就像一个正常的变量。您在子句中定义一个函数,在if子句中定义另一个函数else,并且每个函数在该子句中都是有效的。if-else但是在关闭后两者都无效。

与变量完全相同:

if (a) {
    int x = 3;
} else {
    int x = 4;
}
// x isn't valid here.
于 2012-06-14T06:32:09.747 回答