Почему я не могу вызвать функцию в анонимном пространстве имен из другой функции? - PullRequest
1 голос
/ 27 февраля 2011

Я написал этот кусок кода:

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. Но почему? Конечно, пространство имен является анонимным, но все же функции находятся в одном и том же пространстве имен, не так ли?

1 Ответ

6 голосов
/ 27 февраля 2011

Возможно, это потому, что вы определяете 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...