C ++:使用命名空间,全局变量不起作用

时间:2017-03-04 10:21:03

标签: c++ scope static namespaces

我遇到了以下问题:

当我使用此代码时

#include <iostream>

int count = 10; /* Global variable */

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

   }
   return 0;
}

代码编译得非常好。但是,如果我使用命名空间std添加&#34;&#34;然后我收到错误消息&#34; count unclared&#34;在while循环中。如果我添加&#34;静态&#34;同样如此。之前&#34; int count&#34;。我是C ++的新手,所以我还没有完全理解范围等。有人可以解释一下吗?提前谢谢!

3 个答案:

答案 0 :(得分:3)

名称空间std也声明名称count。此名称对应于标准算法std::count。 所以当你包含指令

using namespace std;

当使用非限定名称count

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

然后可能会有歧义。

要解决歧义,您应该使用限定名称。例如

    using namespace std;

    //...

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

一般来说,使用可能导致这种模糊性的指令并不是一个好主意。

答案 1 :(得分:1)

这种情况正在发生,因为名字&#39;计数&#39;在std llibrary中有另一个定义。 看这里 - http://en.cppreference.com/w/cpp/algorithm/count

std::count

Count是一个模板定义,在使用using namespace std编译器无法在std lib中计数varable和count模板之间进行判断之后,在标准库中进行了定义。 您可能想要更改计数整数名称:)

答案 2 :(得分:0)

不要混淆,只需使用它     :: count / * ::是用于调用全局变量的前缀运算符* / 每当需要调用全局变量时,使用::运算符。