C ++变量范围问题

时间:2011-05-12 22:07:46

标签: c++ scope

我无法理解为什么会这样:

#include <iostream>
using namespace std;

int main(){
     signed long int count = 1;

     //...

     count++;

     return 0;
}

然而,如果我将标识符声明(限制)移动到脚本的开头(就在使用命名空间之后),则无法编译错误“count unclared(首次在此函数中使用)” - 突出显示该行'计数++;'。

或者,Codepad会导致以下错误:

In function 'int main()':
Line 16: error: reference to 'count' is ambiguous
compilation terminated due to -Wfatal-errors.

谢谢,

威尔

3 个答案:

答案 0 :(得分:9)

您的count变量与std::count之间可能存在冲突。 您不应该使用using namespace std,因为这会将标准库中的所有内容放入全局命名空间,名称很快就会发生冲突。

使用using std::cin;之类的特定行来代替。

答案 1 :(得分:2)

尝试使用:: limit,:: count或:: curNum

这表明它们是全球宣布的。虽然,您应该避免全局声明任何变量,而是通过引用传递。

答案 2 :(得分:0)

这编译并运行对我来说很好:

#include <iostream>
using namespace std;

signed long int limit;
signed long int count = 1;
signed long int curNum = 3;

// Declaration of checkprime() function
bool checkprime(signed long int x)
{
    return true;
}

int main(){
     cin >> limit;

     do{
          if(checkprime(curNum) == true){
               count++;
          }
          curNum += 2;
     } while(count < limit);

     return 0;
}