Пространство имен не имеет смысла для меня - PullRequest
1 голос
/ 08 марта 2012

Предположим, в заголовочном файле определено следующее:

namespace MyNamespace
{
   Class global_c;
}

Затем я делаю это в исходном файле:

namespace MyNamespace
{
   void MyClass::Function( )
   {
       ::global_c.DoSomething( );
   }
}

global_c оказывается неопределенным компилятором, если я просто сделаю global_c.DoSomething (); однако, это прекрасно скомпилируется, если я добавлю 'использование пространства имен MyNamespace;' к началу файла это также отлично работает.

Поскольку global_c находится в том же пространстве имен, что и MyClass, почему его нельзя разрешить только потому, что перед ним стоит `:: '?

1 Ответ

10 голосов
/ 08 марта 2012

Поскольку вы явно указываете компилятору использовать глобальное пространство имен, добавляя переменную с ::.Поскольку global_c не существует в глобальном пространстве имен, возникает ошибка.

Компилятор просто делает то, что вы сказали.Думайте о :: как Global::.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...