繁体   English   中英

当 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 中“携带”。 我怎么能修复这个代码? 提前致谢

在您的 main 方法中,您没有声明一个名为xy的变量。 此外,您的point_on_circle(double& x, double& y)函数中的变量r也存在范围界定问题。

请查看 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);
}

它给出了完全相同的结果,同时避免了(潜在的)无限循环,当然也避免了无用的额外处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM