0

非常に簡単な質問です。メインでRomberg関数を呼び出すと、Visual C#Expressで解決方法がわからないというエラーが表示されます(適切な行にエラーメッセージを表示しました)。これを使ってみました。ロンベルグも役に立ちませんでした。私は別の方法で何をすべきですか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Romberg2
{
    class test
    {
        // the function
        double f(double x)
        {
            double f;
            f=8*(Math.Sqrt(1-x*x)-x);
            return f;
        }

        // The Integration function
        void Romberg(double a, double b, int n, double[,] R)
        {
            int i, j, k;
            double h, sum;

            h = b - a;
            R[0,0]=(h/2)*(f(a)+f(b));

            for (i=1; i<=n; i++)
            {
                h=h/2;
                sum=0;

                for (k=1; k <= (Math.Pow(2.0,i)-1); k +=2)
                    sum +=f(a+k*h);

                R[i,0]=R[i-1,0]/2+sum*h;

                for(j=1; j<=i; j++)
                    R[i,j]=R[i,j-1]+(R[i,j-1]-R[i-1,j-1])/(Math.Pow(4.0,j)-1);
            }
        }

        static void main(int argc, char [] argv)
        {
            double[,] R = new double [10,10];
            int n=5, digits=13;
            double a=0, b=1/Math.Sqrt(2.0);

            // Call the integrating function
            Romberg(a, b, n, R);//ERROR: An object reference is required for the non-static field, method, or property

            // Printout the diagram
            for(int i=0; i<n; i++)
            {
                for(int j=0; j<=i; j++)
                {
                    Console.WriteLine(R[i,j] + " ");
                }
                Console.WriteLine("\n");
            }

        }
    }
}
4

8 に答える 8

2

Rombergは静的メソッドではないため、newキーワードを使用してインスタンスを介して呼び出す必要があります

new test().Romberg(a, b, n, R);

または単に静的関数にします

static void Romberg(double a, double b, int n, double[,] R)
于 2012-05-07T21:32:19.447 に答える
2

mainは静的であるため、インスタンスメソッドを呼び出すことはできません。Romberg静的として宣言するか、のインスタンスを作成しtestてそのインスタンスを使用します。

var inst = new test();
inst.Romberg(a, b, n, R);

詳細については、静的クラスと静的クラスメンバーに関するMSDNの記事を参照してください。

于 2012-05-07T21:32:21.153 に答える
2

Mainは静的メソッドでRoombergあり、はインスタンスメソッドです。内部にクラスの新しいインスタンスを作成し、インスタンスをMain介して呼び出すか、Roomberg静的にします。

于 2012-05-07T21:32:22.863 に答える
1

関数を静的にする必要があります。そうRombergでない場合は、関数を独自のクラスでラップし、インスタンス化して実行することができます。

于 2012-05-07T21:32:16.780 に答える
1

インスタンスでそのメソッドを呼び出す必要があります。そのメソッドは、クラスのインスタンスに属しています。

var inst = new test();
inst.Romberg(q, w, e, R);
于 2012-05-07T21:32:26.083 に答える
1

これを試して。呼び出すには、最初にクラスオブジェクトRomberg(a, b, n, R);を作成する必要があります。インスタンスメソッドです。testRomberg

test obj=new test();
obj.Romberg(a, b, n, R);
于 2012-05-07T21:33:07.237 に答える
1

3つの問題:

1)メインが正しい形式ではありません。次のいずれかの形式である必要があります。

static void Main() {...} 
static void Main(string[] args) {... } 
static int Main() {...} 
static int Main(string [] args) {...}

'static void Main()'に変更するだけです

2)ロンバーグ法を静的にする

static void Romberg(double a, double b, int n, double[,] R)

3)fメソッドを静的にします。

static double f(double x)
于 2012-05-07T21:41:26.293 に答える
0

初期化されていないクラスからメソッドを呼び出そうとしています。

 static void Romberg(double a, double b, int n, double[,] R)
于 2012-05-07T21:33:37.143 に答える