[英]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 方法中,您沒有聲明一個名為x
或y
的變量。 此外,您的point_on_circle(double& x, double& y)
函數中的變量r
也存在范圍界定問題。
因為您在 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.