c++ - 为什么我不能从另一个函数中调用匿名命名空间中的函数?

标签 c++ namespaces

这段代码是我写的:

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/

相关文章:

c++ - std::vector 的 std::vector 邻接

function - 命名空间::function cannot be used as a function

c# - 从 ASMX WebService 中删除空命名空间

c++什么是段错误的好调试器?

c++ - QT QUdpSocket : No such file or directory

c++ - 将对象嵌入到链表c++

c++ - 如何将字节序转换为位数组

c# - 2 个对象,完全相同(命名空间除外)c#

c++ - 使用标准命名空间

visual-studio-2010 - 安装了来自 NuGet 的引用,但 VS2010 找不到命名空间