Actionscript 3 AS3中接收错误1026,不知道原因

Actionscript 3 AS3中接收错误1026,不知道原因,actionscript-3,apache-flex,constructor,syntax-error,Actionscript 3,Apache Flex,Constructor,Syntax Error,我得到了错误1026,这是“构造函数必须是实例方法”,我不知道为什么。我正在创建一个媒体播放器类型的程序,我的音乐部分有问题。在此之前,我制作了一个函数音乐播放器,并将代码复制到我的新项目中。现在唯一不同的是代码处于一种状态,而不是main.mxml文件。下面是我的代码,我收到一个错误,上面写着“public var music:Sound”;我不明白为什么会出现这个错误,希望您能提供帮助 <fx:Declarations> <fx:XML id="musicXML"

我得到了错误1026,这是“构造函数必须是实例方法”,我不知道为什么。我正在创建一个媒体播放器类型的程序,我的音乐部分有问题。在此之前,我制作了一个函数音乐播放器,并将代码复制到我的新项目中。现在唯一不同的是代码处于一种状态,而不是main.mxml文件。下面是我的代码,我收到一个错误,上面写着“public var music:Sound”;我不明白为什么会出现这个错误,希望您能提供帮助

<fx:Declarations>
    <fx:XML id="musicXML" source="data/musak.xml" />
    <s:XMLListCollection id="musicCollection" source="{musicXML.song}" />

</fx:Declarations>
<s:HGroup>
    <s:DataGrid id="musicGrid" dataProvider="{musicCollection}" click="onClick()" />
    <local:MusicPosition id="mProgress" width="319" height="83"/>

    <s:VGroup height="55">
        <s:Label text="Now playing: {musicGrid.selectedItem.@name}" />
        <s:Label id="txtPosition" width="91"/>
    </s:VGroup>

</s:HGroup>
<s:Button x="146" y="93" label="play" click="playMusic()"/>
<s:Button x="270" y="93" label="pause" click="pauseMusic()"/>
<fx:Script>

    <![CDATA[

        //set your variables
        public var music:Sound;
        [Bindable]public var musicChannel:SoundChannel;
        public var pausedTime:Number = 0;

        public function onClick():void {
            if(musicChannel) {
                musicChannel.stop();

                //clean up the variables
                music = null;
                musicChannel = null;

            }
            music = new Sound();
            music.load(new URLRequest(musicGrid.selectedItem.file.toString()));
            music.addEventListener(Event.COMPLETE, onMusicLoad);

        }

        public function onMusicLoad(e:Event):void {

            mProgress.update(0);
            //new channel
            musicChannel = music.play();


        }

        protected function onE(e:Event):void {
            if(musicChannel) {
                txtPosition.text = millisecondsToSeconds(musicChannel.position).toString() + "/" +
                    millisecondsToSeconds(music.length).toString();
                mProgress.update(musicChannel.position/music.length);

                mProgress.alpha = 1;
            } else 
                mProgress.alpha = 0;

        }

        protected function millisecondsToSeconds(milliseconds:Number):Number {
            return Math.round(milliseconds/1000);
        }

        public function pauseMusic():void {
            if(musicChannel) {
                pausedTime = musicChannel.position;
                musicChannel.stop();
            }
        }

        public function playMusic():void {
            if(musicChannel) {
                musicChannel = music.play(pausedTime);
            }
        }
    ]]>
</fx:Script>

命名东西时要非常小心。不能在类内创建与类本身同名的变量或方法

一个常见但非必需的命名约定是:

  • 类的用例。在本例中,您的类将命名为Music.mxml或Music.as。根据您的代码,您的MusicPosition类似乎已经遵循了这个约定
  • 方法使用camelcase,但将第一个字母改为小写。在本例中,您的变量可以命名为music。或者,您可以创建一个名为musicPosition的变量。请记住,在Flex中,MXML标记的id属性相当于变量名
  • 对于常量,请使用所有大写字母。常量通常用作事件类型

同样,这些是[在Flex/ActionSCript之外的编程语言中]常见的约定,但Flex SDK并不要求或强制执行这些约定

此代码所在组件的名称是什么?完整组件是什么?这是编译时错误还是运行时错误?例如,如果这是一个名为music的类,您可能在尝试创建名为“music”的变量时遇到问题。我…觉得自己很笨。这个班也被命名为音乐班。更改了变量名,它就工作了。谢谢你为我指出这一点!为了帮助避免将来出现这些问题(虽然显然不是完全的,但请注意您命名的内容),所有类都应该大写并使用camelcase,而所有函数和对象名称都应该使用camelcase,但以小写字母开头。唯一的例外是常量(通常在所有的大写字母中,用下划线分隔)不觉得愚蠢;我们都会犯错误。诀窍是继续发现新的错误。我把它作为一个正式的答案发布了出来,并借用了@Apocalyptic0n3对常见命名约定的一些评论。是的,很高兴指出这不是必需的。尽管其他可能查看或维护您的代码的开发人员通常都会这样做。这是个人喜好,虽然在这一点上它被广泛接受为标准,但最好还是继续使用它。@Apocalyptic0n3我在许多不遵循命名约定的项目上工作过。@Marty Wallace不是那种约定只适用于通过get set方法公开的私有变量吗?@www.Flextras.com我从未在一个不使用答案中描述的系统。是的,我只见过用来表示接受者/接受者的下划线。尽管如此,我知道开发人员并不赞成使用它们。