簡體   English   中英

同一名稱空間中的C ++函數調用

[英]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文件中提供barcallBar定義。 在這種情況下,您應該將函數放在聲明它們的名稱空間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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM