2012-05-07 15 views
0

非常に簡単な質問、私はエラーを取得する私はどのように解決するのか分からない、Visual C#Expressで、私のメインでRomberg関数を呼び出すとき(私は、適切な行)。私もこれを使ってみました.Rombergも助けにはなりませんでした。どうすれば違うのですか?C#関数のエラー(オブジェクト参照)

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"); 
      } 

     } 
    } 
} 
+0

ロンバーグを無効にするために、静的な追加 - >静的な無効ロンバーグ – feco

+0

が、これは宿題の質問ですか? –

+0

@Marc最後に私は答えも知っていた:( – asawyer

答えて

1

三つの問題:

1)主は正しい形式ではありません。

2)

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

3静的ロンバーグ法)Fメソッドを作るにします

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

は単に '静的な無効メイン()' のように変更します。それは、これらの形式のいずれかであることが必要静的:

static double f(double x) 
1

あなたのRomberg関数は静的にする必要があり、またはあなたは、それ自身のクラスでそれを包むことをインスタンス化し、それを実行する可能性があります。

2

あなたは

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

または単に静的関数

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

mainが静的​​であるので、作る新しいキーワードを使用してインスタンスを経由して、それを呼び出す必要がありますのでロンバーグは、静的メソッドではありませんインスタンスメソッドを呼び出すことはできません。 staticとしてRombergを宣言し、またはtestのインスタンスを作成し、そのインスタンスを使用します。詳細については

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

を、Roombergはインスタンスメソッドで、静的メソッドがあるStatic Classes and Static Class Members.

2

Main上のMSDNの記事をご覧ください。クラスの新しいインスタンスをMainの内部に作成し、インスタンスを通じて呼び出すか、Roombergも静的にします。

1

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

var inst = new test(); 
inst.Romberg(q, w, e, R); 
1

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

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

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

static void Romberg(double a, double b, int n, double[,] R) 
関連する問題