كيف يمكنني مرجع خارجي C++ مساحة من داخل المتداخلة ؟
-
03-07-2019 - |
سؤال
لدي اثنين من مساحات محددة في الافتراضي/"الجذر" مساحة الاسم ، وكالة الأمن القومي و nsB. وكالة الأمن القومي وقد فرعي مساحة الاسم ، الأمن القومي::سوبا.عندما أحاول الرجوع إلى الوظيفة التي ينتمي إليها nsB, من داخل الأمن القومي::سوبا, أنا على خطأ:
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();
}
لذلك ، في حين تحدد مساحة العالمي يحل المشكلة الحالية الخاصة بك ، بشكل عام من الممكن أن تشير إلى رموز في جهاز الأمن القومي دون ذلك.وإلا يجب عليك أن تكتب ::std::cout, ::std::string, الخ, كلما كنت في آخر مساحة اسم النطاق.و أنت لا.وهو المطلوب.
تحديد مساحة العالمي هو الحالات التي يكون فيها هناك جهاز الأمن القومي واضحة في النطاق الحالي - على سبيل المثال إذا nsA::سوبا الوارد الخاصة به مساحة أو فئة ما يسمى جهاز الأمن القومي ، كنت ترغب في الاتصال ::nsbB:فو بدلا من الأمن القومي::سوبا::nsB::فو.إذا كنت تحصل على خطأ الاقتباس على سبيل المثال إذا كنت قد أعلنت (ولكن لم يتم تعريف) nsA::سوبا::nsB::theFunctionInNsB(...).هل ربما تتضمن #رأس جهاز الأمن القومي من داخل مساحة سوبا?
نصائح أخرى
استخدام النطاق العالمي القرار:
::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;
}