Как я ссылаюсь на внешнее пространство имен C++ из вложенного?

Неиспользуемая память не отображается в адресное пространство процесса. Если вы можете получить доступ к памяти, это означает, что что-то отобразило память, используя mmap (или эквивалент). Если память не используется, вы не можете получить к ней доступ.

5
задан Lily 29 April 2009 в 17:50
поделиться

3 ответа

Нужна дополнительная информация, чтобы объяснить эту ошибку. Следующий код подходит:

#include <iostream>

namespace nsB {
    void foo() { std::cout << "nsB\n";}
}

namespace nsA {
    void foo() { std::cout << "nsA\n";}
    namespace subA {
        void foo() { std::cout << "nsA::subA\n";}
        void bar() {
            nsB::foo();
        }
    }
}

int main() {
    nsA::subA::bar();
}

Таким образом, хотя указание глобального пространства имен решает вашу текущую проблему, в целом можно ссылаться на символы в nsB без него. В противном случае вам придется писать :: std :: cout, :: std :: string и т. Д. Всякий раз, когда вы находитесь в другой области имен. А ты нет. QED.

Указание глобального пространства имен предназначено для ситуаций, когда в текущей области виден другой nsB - например, если nsA :: subA содержал свое собственное пространство имен или класс с именем nsB, и вы хотите вызвать :: nsbB: foo, а не АНБ :: Субе :: NSB :: Foo. Так что вы' вы получите ошибку, которую вы цитируете, если, например, вы объявили (но не определили) nsA :: subA :: nsB :: theFunctionInNsB (...). Возможно, вы #include заголовка для nsB изнутри пространства имен subA?

2
ответ дан 18 December 2019 в 13:19
поделиться

Use global scope resolution:

::nsB::TheFunctionInNsB()
7
ответ дан 18 December 2019 в 13:19
поделиться
#include <stdio.h>

namespace nsB {
    void foo() {
        printf( "nsB::foo()\n");
    }
}

namespace nsA {
    void foo() {
        printf( "nsA::foo()\n");
    }

    namespace subA {
        void foo() {
            printf( "nsA::subA::foo()\n");
            printf( "calling nsB::foo()\n");

            ::nsB::foo();      // <---  calling foo() in namespace 'nsB'
        }
    }
}

int main()
{
    nsA::subA::foo();

    return 0;
}
5
ответ дан 18 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: