这段代码是我写的:
namespace {
void SkipWhiteSpace(const char *&s) {
if (IsWhiteSpace(*s)) {
s++;
}
}
bool IsWhiteSpace(char c) {
return c == ' ' || c == '\t' || c == '\n';
}
} // namespace
问题是编译器提示 IsWhiteSpace()
未在此范围内声明
。但为什么?当然,命名空间是匿名的,但函数仍然位于同一命名空间内,不是吗?
最佳答案
可能是因为您在 SkipWhiteSpace
之后定义了 IsWhiteSpace
。
编辑:
我成功编译了以下代码:
#include <iostream>
using namespace std;
namespace
{
void Function2()
{
cout << "Hello, world!" << endl;
}
void Function1()
{
Function2();
}
}
int main()
{
Function1();
}
将 Function1
移动到 Function2
上方会导致您提到的错误。所以,是的,这是因为 SkipWhiteSpace
不知道 IsWhiteSpace
。您可以通过提前声明函数然后在之后正常定义它们来解决这个问题,如下所示:
namespace
{
void Function1();
void Function2();
void Function1()
{
Function2();
}
void Function2()
{
cout << "Hello, world!" << endl;
}
}
关于c++ - 为什么我不能从另一个函数中调用匿名命名空间中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5135198/