3
    if(array[3][3].getCall() == false && array[3][3].getUser() == Car.user.NONE )
    {
        array[3][3] = new Car('s', Car.user.USER, false);
        aCounter++;

        System.out.println("everything is fine");

    }

this bit of code gives me: error: non-static variable user cannot be referenced from a static context.

public class Car
{

    public enum User { USER, COMP, NA };

    private char object;
    public User user;
    private boolean call;

    public Car(char object, User user, boolean call)
    {
        this.object = object;
        this.user = user;
        this.call = call;
    }
}

Enum is public, because I get "user has private access errors" otherwise. I know that enum is a non-static variable declared inside a constructor, so I am thinking that this is where the error comes from, but I have no clue as to how to fix it.

prog
  • 150
  • 3
  • 11

1 Answers1

6

The problem has nothing to do with enum variables and everything to do with static fields and classes vs non-static fields and classes. Note that when you write

Car.user.NONE

Car.user refers to the field named user on the Car class – but Car.user is an instance variable, not a static one. Hence, the error:

non-static variable user cannot be referenced from a static context

To fix this, just change Car.user to Car.User so that expression refers to the enum User rather than the User user field.

if(array[3][3].getCall() == false && array[3][3].getUser() == Car.User.NONE )
{
    array[3][3] = new Car('s', Car.User.USER, false);
    aCounter++;

    System.out.println("everything is fine");
}
Matt Ball
  • 354,903
  • 100
  • 647
  • 710
  • 3
    According to [this question](http://stackoverflow.com/q/663834/1169798), the enum is implicitly `static`. – Sirko Jan 19 '13 at 18:45