C++变量作用域问题

发布于 2024-11-06 11:52:59 字数 572 浏览 0 评论 0原文

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

#include <iostream>
using namespace std;

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

     //...

     count++;

     return 0;
}

但是,如果我将标识符声明(限制)移动到脚本的开头(就在 using 命名空间之后),它无法编译并出现错误“count undeclared (first use in this function)” )" - 突出显示“count++;”行。

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

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

谢谢,

Will。

I can't understand why this works:

#include <iostream>
using namespace std;

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

     //...

     count++;

     return 0;
}

And yet if I move the identifier declaration (limit) to the start of the script (just after the using namespace), it fails to compile with the error "count undeclared (first use in this function)" - highlighting the line 'count++;'.

Alternatively, Codepad results in the following error:

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

Thanks,

Will.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一曲爱恨情仇 2024-11-13 11:52:59

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

请改用特定的 using 行,例如 using std::cin;

You probably have a collision between your count variable and std::count.
You should not use using namespace std as this places everything from the standard library into the global namespace and names will soon collide.

Use specific using lines such as using std::cin; instead.

迷雾森÷林ヴ 2024-11-13 11:52:59

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

这表示它们是全局声明的。尽管如此,您应该避免全局声明任何变量,而是通过引用传递。

Try using ::limit, ::count, or ::curNum

This says they are declared globally. Although, you should avoid declaring any variables globally and pass by reference instead.

×眷恋的温暖 2024-11-13 11:52:59

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

#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;
}

This compiled and ran just fine for me:

#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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文