2017-03-04 234 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/* ::是一个前缀运算符,用于调用全局变量*/ 无论何时您需要调用全局变量。