2012-05-07 50 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)主要是不正確的格式。它需要在這些格式之一:

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

只要將它更改爲 '靜態無效的主要()'

2)使龍貝格方法靜態

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

3)製作方法F靜:

static double f(double x) 
1

你需要讓你的Romberg功能靜態的,或者你可以把它包在它自己的類,實例化和執行。

2

容安瀾不是一個靜態方法,所以你應該使用new關鍵字通過一個實例調用它

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

或者乾脆做一個靜態函數

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

main是靜態的,所以它不能調用實例方法。聲明Romberg爲靜態,或創建test一個實例,並使用該實例:

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

欲瞭解更多信息,請檢查出Static Classes and Static Class Members.

2

Main MSDN文章是一個靜態方法,Roomberg是一個實例方法。在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)