2011-07-23 4 views
0

このコードに問題があります。あなたは私を助けることができますか?呼び出し関数がクラス外にある

package Classes 
{ 
    import mx.controls.Button; 

    public class Pages 
    { 
     public function Pages(){ 

     } 

     public function LoginPage():void{ 
      AddButton('cmdLogin', 'Login'); 
     } 

     private function AddButton(id:String, label:String, x:int, y:int, width:int, height:int):void { 
      if (id.length > 0 && label.length > 0) { 
      var button:Button = new Button(); 
      button.id = id; 
      button.label = label; 
      button.x = x; 
      button.y = y; 
      button.width = width; 
      button.height = height; 
      Main.addChild(button); 
      } 
     } 
    } 
} 

Main.mxml

<?xml version="1.0" encoding="utf-8"?> 
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="main()"> 
     <fx:Script> 
      <![CDATA[ 
       import Classes.Pages; 

       private function main():void { 
        Pages.LoginPage(); // <---- HERE IS AN ERROR 
//Description Resource Path Location Type 
1061: Call to a possibly undefined method LoginPage through a reference with static type Class. Main.mxml /File Hosting/src line 30 Flex Problem 

       } 

      ]]> 
     </fx:Script> 
    </s:Application> 
+1

このコードで何が問題だったのか説明しましたか?実際の質問がありましたか? – JeffryHouser

答えて

2

問題は、クラスとクラスのインスタンスの違いを認識していないことです。基本からOOPの詳細を読むことをお勧めします。

Main.addChild(button); 

クラスMainではなく、インスタンスを参照:あなたが@LarsBlåsjöのアドバイスに従うだろうしてものなので、あなたがラインに問題があるでしょう。クラスMainには(静的な)メソッドaddChild()がありません。したがって、他のコンパイラエラーになります。しかし、コンパイラのエラーは問題ではありません。簡単に修正できます。問題は、クラスとインスタンスの相互作用とOOPの原則の理解と理解、そして結果として、すべてのコードがグローバルまたは静的変数を使用しているか、または高い結合性を持つアーキテクチャーの欠如です。

OOPとデザインパターンについて詳しくは、こちらをご覧ください。あなたの将来を変えることができます:)

1

あなたはクラスのメソッドを呼び出すのではなく、そのクラスのインスタンスを作成し、そのインスタンスのメソッドを呼び出したい場合は、関数を宣言する必要がありますstaticとします。

だから、あなたがこれを行うことができます:

public static function LoginPage():void{ 
    AddButton('cmdLogin', 'Login'); 
} 

... 

Pages.LoginPage(); 

...か、ページのインスタンスを作成し、通常の場合と考えることができ、そのオブジェクト上のメソッドを呼び出すことができます。

var pages:Pages = new Pages(); 
pages.LoginPage(); 
+0

あなたは私をtolledように私はやったけど、今ではmain.addChild 説明\tリソース\tパス\t場所\tタイプ 1061上でエラーを示しています。静的な型クラスで参照によって未定義である可能性が高いメソッドにaddChildに呼び出します。 \t Pages.as \t /ファイルホスティング/ src /クラス\t行24 \tフレックス問題 – Volter

関連する問題