중첩 된 내부의 외부 C ++ 네임 스페이스를 어떻게 참조합니까?
-
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;
}
제휴하지 않습니다 StackOverflow