簡體   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