2013-02-24 58 views
-3

用下面的代碼,我得到的錯誤:我應該如何糾正錯誤「引用'p'含糊不清」?

reference to 'p' is ambiguous

爲什麼會這樣呢?我怎樣才能擺脫這一點?我想獲得「79」作爲輸出。有人可以拋出一些光。謝謝你的時間!

int p=3; 
namespace {int p=7;} 
namespace {int q=9;} 

main() 
{  
    cout << p << q; 
} 
+2

我在此代碼中看不到任何名爲'i'的東西。無論如何,你有沒有考慮過......沒有兩個同名的變量? – jalf 2013-02-24 14:42:12

+1

你試圖打印哪個'p'? – 0x499602D2 2013-02-24 14:43:43

+0

我很抱歉,請刷新您的頁面。謝謝。 – sree 2013-02-24 14:44:02

回答

4

刪除用戶可以在本

int p=3; 

或本

namespace {int p=7;} 

或者,你可以把一個命名空間中的第一個聲明:

namespace foo 
{ 
    int p=3; 
} 

給匿名命名空間的名稱:

namespace bar {int p=7;} 

然後

main(){ 
    std::cout <<bar::p << q; 
} 
+0

那麼別無他法?感謝您的答覆 ! – sree 2013-02-24 14:42:54

+0

@sree:還有另一種方式,我認爲 – 2013-02-24 14:43:36

+0

或命名空間的名稱。 – 2013-02-24 14:44:20

4

@juanchopanza提出一個很好的解決方案。這裏是另一個:使用合格的名稱來引用在全局命名空間中聲明的變量:

#include <iostream> 

int p=3; 
namespace {int p=7;} 
namespace {int q=9;} 

int main() 
{ 
    std::cout << ::p << q; 
    //   ^^^ 
} 
+0

所以它不可能得到一個o/p 79?謝謝你的建議。 – sree 2013-02-24 14:46:13

+0

@sree您不能使用完全限定的標識符引用匿名名稱空間的成員。所以不行。你不能得到「79」輸出。 – 2013-02-24 14:48:55

+0

@sree:Nikos C.給了你答案。如果你想用一個限定的名字來引用變量,你需要給這個名字空間一個名字。 – 2013-02-24 14:50:28