Home > Software engineering >  Invalid token '=' in class, record, struct, or interface member declaration
Invalid token '=' in class, record, struct, or interface member declaration

Time:06-21

I am currently working on a project in Visual Studio 2019 Community and after a little while of programming it just stopped accepting new variables in a way.

I was trying to create a dictionary to bind some keys to certain actions and when I tried to add to the dictionary using keyBindings.add(foo, bar) Visual Studio and the compiler stopped recognizing the variable as even existing. Now, in any file or class, when I try to create a variable and set it to something or use it, it just throws Invalid token '=' in class, record, struct, or interface member declaration for the = sign and states that variable does not exist in the current context.

i.e.

int x;
x = 10;

It will throw error CS1519 on the second line.

Here is all of my code, so far, relating to the dictionary itself.

class KeyboardHandler
    {
        Dictionary<_Keys, Actions> keyBindings = new Dictionary<_Keys, Actions> ();


        public bool isKeyPressed(_Keys key)
        {
            if (Keyboard.GetState().IsKeyDown((Keys)key))
            {
                return true;
            }

            return false;
        }
    }

_Keys and Actions reference enums outside of the class.

CodePudding user response:

Directly inside a class, you can only define variables, properties and methods. For example, this code is fine:

class Example
{
   private int x;
   public string y { get; set; }
   public void MethodA() { }
   public void MethodB() { }   
}

However, this is not allowed

class Example2
{
    Console.WriteLine("abc");
}

Because it is not the definition of a variable, property or a method. You have to move the statement above inside a method:

class Example3
{
    public void Method()
    {
         Console.WriteLine("abc");
    }
}

In your case, if you want to fill the dictionary, you can do it in the constructor. The constructor will be called when a new instance of your class is created. Hence you can be sure that your dictionary is filled when you call any methods of your instance:

class KeyboardHandler
{
    Dictionary<_Keys, Actions> keyBindings = new Dictionary<_Keys, Actions> ();

    public KeyBoadHandler()
    {
         keyBindings.Add(foo, bar);
    }

    public bool isKeyPressed(_Keys key)
    {
        if (Keyboard.GetState().IsKeyDown((Keys)key))
        {
            return true;
        }
        return false;
    }
}
  • Related