[英]C++ function call within same namespace
在實現中使用“ using namespace”關鍵字時,從同一名稱空間中從另一個功能調用一個函數的正確方法是什么? 我收到以下錯誤:
呼叫“酒吧”不明確
編譯時:
// Foo.h
namespace Foo
{
void bar();
void callBar();
}
// Foo.cpp
#include "Foo.h"
using namespace Foo;
void bar() {/* do something */}
void callBar() {bar();}
看來您正在cpp文件中提供bar
和callBar
定義。 在這種情況下,您應該將函數放在聲明它們的名稱空間Foo
中,而不要using
以下命令導入該名稱空間:
#include "Foo.h"
namespace Foo {
void bar() {/* do something */}
void callBar() {bar();}
}
using namespace
指令告訴編譯器您要調用函數並從名稱空間Foo
引用類,而無需顯式限定其名稱。 您的文件中可以有多個這樣的指令。 它不會告訴編譯器,你在下面提供的定義應該屬於命名空間Foo
,所以編譯器在頂級命名空間轉儲它們。
最終的結果是,編譯器看到2 bar
秒-中Foo::bar()
在聲明Foo
命名空間,與外部的定義,並::bar()
在默認命名空間中的CPP文件中定義。
您在這里有兩個bar
。 一個在命名空間Foo
聲明但未定義 ,另一個在全局命名空間中聲明和定義 。 兩者都可以從呼叫站點訪問,因為您正在using namespace Foo;
,因此對於編譯器來說是模棱兩可的。
如果函數的定義是針對Foo
命名空間中的函數的,那么您也應該將它們放在其中。
namespace Foo {
void bar() {/* do something */}
void callBar() {bar();}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.