C++中的函数通过引用调用时,变量在main中超出范围
Variables out of scope in main when called by reference by a function in C++
我做了以下代码,其输出应该在以原点为中心的单位圆上随机均匀地生成一个点:
#include "unif.h"
#include <iostream>
#include <cmath>
using namespace std;
void point_on_circle(double& x, double& y)
{
double r;
do
{
double x = unif(-1.,1.);
double y = unif(-1.,1.);
double r = x*x + y*y;
}
while (r >=1.0);
x = x / sqrt(r);
y = y / sqrt(r);
}
int main()
{
cout << "Pair of points on the circle found is " << x << " and " << y << endl;
cout << "Let's verify: x^2+y^2=" << x*x+y*y << endl;
return 0;
}
标题"unif.h"只是一个包含函数void unif(double x,double y)的文件,该函数在区间(x,y)中产生均匀的随机数,并且它工作得很好(已经测试过)。问题是,当我构建程序时,它(当然)会给我主要的错误:
"错误:没有在此作用域中声明"x"
这是清楚的,因为x当然是在main之外定义的,而从来没有在main()中定义过。我不知道如何告诉编译器,函数point_on_circle找到的x和y的值应该在main中"携带"。如何修复此代码?提前感谢
在您的主方法中,您既没有声明名为x
的变量,也没有声明y
的变量此外,您在使用变量r
的point_on_circle(double& x, double& y)
函数中也存在范围界定问题。
请查看C++范围
因为你在do-while循环中定义了x,所以你不能在循环之外使用它,因为这些定义隐藏了参数x和y。在循环之前定义它:
void point_on_circle(double& x, double& y)
{
double r;
do
{
x = unif(-1.,1.);
y = unif(-1.,1.);
r = x*x + y*y;
}while (r >=1.0);
x = x / sqrt(r);
y = y / sqrt(r);
}
您有一些问题。1) 您需要在main中声明x和y。2) 你从来没有真正调用过point_on_circle。完全3) 最后,正如其他人所指出的,在do循环中屏蔽参数x和y。
话虽如此,看起来你正试图在单位圆上找到一个随机点。考虑到这一点,我会完全取消do循环,只做以下操作:
void point_on_circle(double& x, double& y)
{
double r;
x = unif(-1.,1.);
y = unif(-1.,1.);
r = x*x + y*y;
x = x / sqrt(r);
y = y / sqrt(r);
}
它给出了完全相同的结果,同时避免了(潜在的)无休止的循环,当然也避免了无用的额外处理。
相关文章:
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- 为什么 'main' 函数中的局部 int 变量会自动初始化?
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- Pthread段错误,使用指向main中变量的指针
- 将变量从 main 传递到公共类函数?
- 如何使用类中的函数从 main 打印变量,帮助理解 OOP c++
- 在 main 之前调试全局变量的赋值
- C++ main 函数中初始化静态变量
- 如何使用GDB跟踪Main()之前初始化的所有静态全局变量
- 如何使一个成员变量等于在main()中设置的另一个成员变量
- C++ - 类方法更改成员变量,但不在 main 中
- 如何让变量在每次运行时增加 "return main();"
- 静态变量需要在MAIN处理ARGV参数之前进行初始化
- 静态内联变量是否需要在 main 之前初始化?
- 如何获取函数以在 Main() 中重新处理变量
- 我需要创建一个函数在用户下打印"=",但由于变量是使用 main() 声明的,因此函数看不到参数
- 非本地非内联变量的初始化:是否严格在"main()"函数调用之前进行
- 为什么我不能在 main 函数中更改类的公共变量
- 如何使用 x86 程序集在 c 中访问 main 函数中的变量
- 在 main() 中定义全局变量