2017-03-04 93 views
-4

我有以下問題:C++:使用命名空間,全局變量是行不通的

當我使用此代碼

#include <iostream> 

int count = 10; /* Global variable */ 

int main() { 
    while(count--) { 

    } 
    return 0; 
} 

代碼編譯得很好。但是,如果我添加「使用名稱空間標準;」那麼我會在while循環中收到錯誤消息「count undeclared」。如果我在「int count」之前添加「static」,情況也是如此。我是C++的新手,所以我沒有完全理解範圍等。有人可以解釋嗎?提前致謝!

+2

[No repro](http://coliru.stacked-crooked.com/a/667974613315759d)。請發佈非工作代碼的[MCVE]。 –

+1

您能否將'using namespace std;'語句寫入代碼中供大家參考。另外,你在使用什麼編譯器?我無法重現它:http://coliru.stacked-crooked.com/a/8b9ef25d202c5af9 – batbrat

+0

該問題顯示的代碼,**工程**,但應顯示代碼,**不起作用**。 –

回答

3

名稱空間std也聲明名稱count。該名稱對應於標準算法std::count。 所以,當你包括指令

using namespace std; 

,當使用不合格的名稱count這樣

而(count--){// ... }

然後可以有一個歧義。

要解決歧義問題,您應該使用限定名稱。例如,

using namespace std; 

    //... 

    while(::count--) { 
      ^^^^^^^^ 
     //... 
    } 

一般來說,使用可能導致如您的示例中那樣不明確的指令並不是一個好主意。

1

發生這種情況是因爲名稱'count'在std llibrary中有另一個定義。 看這裏 - http://en.cppreference.com/w/cpp/algorithm/count

std::count 

計數是被definted在非標準庫,使用using namespace std編譯器計數varable,並從標準庫計數模板之間不能告訴後一個模板定義。 您可能想要更改整數名稱:)

+0

必須是一個編譯器特定的實現問題('algorithm'包含在'iostream'中)。 –

+0

謝謝,我想知道爲什麼我自己沒有得到答案,因爲它很明顯。 :) – Yinyue

0

不要混淆,只需使用這個 :: count/* ::是一個前綴運算符,用於調用全局變量*/ 無論何時您需要調用全局變量。