C# 函数错误(对象引用)

本文关键字:对象引用 错误 函数 | 更新日期: 2023-09-27 18:33:23

非常简单的问题,当我在 main 中调用 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");
            }
        }
    }
}

C# 函数错误(对象引用)

Romberg 不是一个静态方法,所以你应该使用 new 关键字通过实例调用它

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

或者简单地使其成为静态函数

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

main是静态的,因此它不能调用实例方法。将Romberg声明为静态,或创建test实例并使用该实例:

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

有关详细信息,请查看有关静态类和静态类成员的 MSDN 文章。

Main是一个

静态方法,Roomberg是一个实例方法。要么在 Main 中创建类的新实例并通过该实例调用它,要么Roomberg也设置为静态。

三个问题:

1) 主格式不正确。 它需要采用以下格式之一:

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

只需将其更改为"静态空隙 Main()"

2) 使罗姆伯格方法静态

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

3) 使f方法静态:

static double f(double x)
你需要

使你的Romberg函数成为静态的,或者你可以把它包装在它自己的类中,实例化并执行它。

您需要在实例上调用该方法。该方法属于类的实例。

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

试试这个。要调用Romberg(a, b, n, R);必须先创建test类对象。 Romberg是一个实例方法。

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

您正在尝试从未初始化的类调用方法。

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