views:

1755

answers:

2

Hi, I have a custom class defined in Actionscript and I want to make an instance of it in the main document of Flash application. However, after calling the constructor with one argument, Flash gives me this error:

Error #1063: Argument count mismatch on coa.application::MenuItem(). Expected 1, got 0.

This is my class:

public class MenuItem extends MovieClip{
 var button:SimpleButton;

 public function MenuItem(buttonLoc:uint) {

  button = new InvBtn();
  this.addChild(button);
  button.x=-81;
  button.y=buttonLoc*33;
  button.addEventListener(MouseEvent.CLICK, mybringToFront);
 }
}

And this is my attempt to call its constructor:

var menu1:MovieClip = new MenuItem(3);

Any idea, whats wrong?

+3  A: 

Apologies, I can't comment yet, or I'd put this in a comment.

Are you sure that:

var menu1:MovieClip = new MenuItem(3);

is the only place that you're constructing a new MenuItem? You don't by any chance have the MenuItem class attached to some instances on the stage?

I changed your code to this (just so I could run it) and it works fine:

package{
    import flash.display.MovieClip;
    import flash.display.SimpleButton;
    import flash.events.MouseEvent;
    public class MenuItem extends MovieClip{

            var button:SimpleButton;

            public function MenuItem(buttonLoc:uint) {

                    button = new SimpleButton();
                    this.addChild(button);
                    button.x=-81;
                    button.y=buttonLoc*33;
                    button.addEventListener(MouseEvent.CLICK, mybringToFront);
            }

      public function mybringToFront(event:MouseEvent):void{
       trace('blah');
      }
    }
}
quoo
oops, yes, you are right, there was an instance of that symbol on the stage, but i didnt realize it until reading this ;) thanxalot
Dungeo
+1  A: 

Like quoo said, most likely you have an instance of the object that the class is attached to on stage. To test for that do this:


public class MenuItem extends MovieClip{
        var button:SimpleButton;

        // I changed it to int, cuz uint is extremely slow for any math
        // other than bitwise operators, int is fast as long as no fractions
        public function MenuItem(buttonLoc:int = -1) {
                if (buttonLoc == -1)
                    trace("On stage instance found! Location: "+x+", "+y);

                button = new InvBtn();
                this.addChild(button);
                button.x=-81;
                button.y=buttonLoc*33;
                button.addEventListener(MouseEvent.CLICK, mybringToFront);
        }
}

Bryan Grezeszak