web-dev-qa-db-ja.com

「...別の種類のシンボルとして再宣言」?

#include <stdio.h>
#include <math.h>

double integrateF(double low, double high)
{
    double low = 0;
    double high = 20;
    double delta_x=0;
    double x, ans;
    double s = 1/2*exp((-x*x)/2);

    for(x=low;x<=high;x++)
        delta_x = x+delta_x;
    ans = delta_x*s;

    return ans;
}

低と高は「異なるタイプのシンボルとして再宣言される」とあり、それがどういう意味かわかりません。基本的に、ここで行っていること(READ:trying)は、リーマンの合計を求めるために、低(0に設定)から高(20)に積分しています。 forループもちょっとトリッピーに見えます...私はとても迷っています。

編集:

#include <stdio.h>
#include <math.h>

double integrateF(double low, double high)
{
    low = 0;
    high = 20;
    double delta_x=0;
    double ans = 0;
    double x;
    double s = 1/2*exp((-x*x)/2);

    for(x=low;x<=high;x++)
    {
        delta_x = x+delta_x;
        ans = ans+(delta_x*s);
    }
    return ans;
}

^中かっこなどの後でも、それはまだ機能しません。 「「WinMain @ 16」への未定義の参照」と書かれています...

8
CodeNewb

あなたは、パラメータの中で定義されたものと衝突する関数の内部で低と高を再定義しています。

Forループがやっている

for(x=low;x<=high;x++)
{
   delta_x = x+delta_x;
}

するつもりですか

for(x=low;x<=high;x++)
{
   delta_x = x+delta_x;
   ans = delta_x*s;
}

しかし、あなたがやりたかったと思うans += delta_x*s;

6
Martin Beckett

lowおよびhighは、integrateFメソッドのパラメーターとして既に渡されています。ただし、メソッド内で再び再宣言されます。したがってエラー。

1

lowとhighは、integrateFメソッドのパラメーターとして既に渡されており、メソッド内で再び再宣言されます。

また、sの計算に使用している場合、xには値が割り当てられません。


double x、ans; double s = 1/2 * exp((-x * x)/ 2);


1
Devi K M

あなたはこのように試してみたいかもしれません:-

_for(x=low;x<=high;x++)
{                          //Use brackets since you are redefining low and high inside the function
delta_x = x+delta_x;
ans = delta_x*s;
}
_

または

_for(x=low;x<=high;x++)
{                          //Use brackets since you are redefining low and high inside the function
delta_x = x+delta_x;
}
_

編集:-

"WinMain @ 16 'への未定義の参照"

main() or WinMain()が定義されていることを確認してください。また、main()がネームスペース内で定義されていないことを確認してください

0
Rahul Tripathi

このエラーを引き起こすもう1つの方法は、その名前タグがメイン関数の外部の変数としてすでに使用されているコードで関数を「再定義」することです-同様に(疑似コード):

_double integrateF = 0;

main(){
 // get vars to integrate ...
}

double integrateF(double, double){
  //do integration
}
_

Mainの内部で関数を呼び出してコンパイルのエラーを発生させる必要はありません。代わりに、コンパイラーはmain関数の外部でdouble integrateF = 0 = (double, double) { };を理解できません。

0