중첩 된 내부의 외부 C ++ 네임 스페이스를 어떻게 참조합니까?

StackOverflow https://stackoverflow.com/questions/803506

  •  03-07-2019
  •  | 
  •  

문제

기본/"루트"네임 스페이스에 정의 된 두 개의 네임 스페이스가 있습니다. NSA 그리고 NSB. NSA 하위 이름 공간이 있으며 NSA :: Suba. 내가 속한 함수를 참조하려고 할 때 NSB, 내부에서 NSA :: Suba, 나는 오류가 발생한다 :

undefined reference to `nsA::subA::nsB::theFunctionInNsB(...)'

어떤 아이디어?

도움이 되었습니까?

해결책

해당 오류를 설명하려면 더 많은 정보가 필요합니다. 다음 코드는 괜찮습니다.

#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라는 자체 네임 스페이스 또는 클래스를 포함하고 NSA :: suba :: nsbb : foo를 호출하려는 경우 :: nsbb : foo를 문의하십시오. : nsb :: foo. 예를 들어 NSA :: suba :: nsb :: thunctionInnsb (...)를 선언 한 경우 (예를 들어 정의되지 않았지만 정의되지 않은 경우) 인용 오류가 발생합니다. 내부 네임 스페이스 SUBA에서 NSB의 헤더를 #includ 했습니까?

다른 팁

글로벌 범위 해상도 사용 :

::nsB::TheFunctionInNsB()
#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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top