开发者

C# "Object reference not set to an instance of an object."

开发者 https://www.devze.com 2023-02-05 13:33 出处:网络
I get that error when I attempt to use the btn connected to it: private void btnAccel_Click(object sender, EventArgs e)

I get that error when I attempt to use the btn connected to it:

private void btnAccel_Click(object sender, EventArgs e)
            {

                pStatus.Text = plane.speed.ToString();
                plane.speed = double.Parse(txtSpeed.Text);
                plane.Accelerate();
                pStatus.Text = plane.speed.ToString();   
            }

pStatus is a panel I use and update the current speed before and after I increase the speed. plane is defined above as :

Airplane plane = new Airplane();

The error seems to happen when it gets to plane.Accelerate();

public void Accelerate()
        {
            // increase the speed of the airplane

            if (PlanePosition.speed < Position.MAX_SPEED)
            {
                PlanePosition.speed = PlanePosition.speed + 1;  // or speed += 1;
            }//end of if
            numberCreated++;  // increment the numberCreated each time an Airplane object is created

        }//end of public Accelerate()

That first line if(PlanePosition.speed < Position.MAX_SPEED) is where it keeps happening from what VS is telling me.


//private variables
        private string name{get; set;}
       private Position planePosition;
      开发者_Python百科  private static int numberCreated;

        //default constructor
        public Airplane()
        {

        }//end of public Airplane


        public Position PlanePosition{get;set;}

class Position
    {
        //private variables
     internal int x_coordinate;
     internal int y_coordinate;
     internal double speed;
     internal int direction;
     internal const int MAX_SPEED = 50;

        //default constructor
        public Position()
        {

        }//end of public Position

        public string displayPosition()
        {
            return "okay";
        }//end of public string displayPosition()
    }//end of class Position


Then PlanePosition is clearly null. You are probably missing a

PlanePosition = new Position(); // or whatever the type of PlanePosition is

in your constructor for Airplane or

private PlanePosition = new Position();

to initialize the field or analogously if it's a property.

I see you left the following comment to another answer:

public Position PlanePosition{get;set;}

So this is an automatic property, and you aren't initializing it. Therefore, it receives the default value which for a reference type is null. You need to initialize this in the constructor:

public Airplane() {
    this.PlanePosition = new Position(// parameters for constructor);
    // rest of constructor
}


Generally speaking, the error will occur when you try to use an object that you haven't instantiated.

So PlanePosition is the the name of the class, you'll want to instantiate the class and then use the method with the object.

PlanePosition myPlane = new PlanePosition();
myPlane.speed < ...

But I don't think there's enough detail provided to be any more specific than what I've given you. What is PlanePosition? A class or an object?


PlanePosition isn't being initialized. You need to make sure an object is assigned to PlanePosition before calling Accelerate

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号