我写了这段代码:
namespace {
void SkipWhiteSpace(const char *&s) {
if (IsWhiteSpace(*s)) {
s++;
}
}
bool IsWhiteSpace(char c) {
return c == ' ' || c == '\t' || c == '\n';
}
} // namespace
问题是编译器抱怨IsWhiteSpace()
was not declared in this scope
。但为什么?当然,名称空间是匿名的,但功能仍然在同一名称空间内,不是吗?
答案 0 :(得分:6)
也许是因为您在IsWhiteSpace
之后定义SkipWhiteSpace
。
修改强>
我成功编译了以下代码:
#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;
}
}