2010-02-09 5 views
2

Question: J'obtiens une erreur gênante: J'essaie d'utiliser le type Size dans le code ActionScript ci-dessous. Mais je reçois toujours cette erreur:
1046: Type n'a pas été trouvé ou n'était pas une constante de compilation: Taille.
Mais peu importe ce que j'essaie, il semble briser quand j'ajoute
public function get Taille(): Taille
D'une certaine façon, il n'aime pas le type de retour Taille, mais ce que je fais mal?Flash Actionscript 3 n'acceptant pas la constante de compilation

package BaseTypes 
{ 
    public class StockData 
    { 
     private var size:Size; 
     public function get Size():Size 
     { 
      return this.size; 
     } 
     public function set Size(value:Size):void 
     { 
      this.size = value; 
     } 
    } // End Class 
}// End Package 

J'ai le code ci-dessous dans BaseTypes dossier, et il est dans le chemin de classe AS3.

package BaseTypes 
{ 
    public class Size 
    { 
     private var width:Number; 
     private var height:Number; 
     public function Size(width:Number, height:Number) 
     { 
      this.width = width; 
      this.height = height; 
     } 
     public function get Width():Number 
     { 
      return this.width; 
     } 
     public function set Width(value:Number):void 
     { 
      this.width = value; 
     } 
     public function get Height():Number 
     { 
      return this.height; 
     } 
     public function set Height(value:Number):void 
     { 
      this.height = value; 
     } 
     public function toString():String 
     { 
      return "{width: " +this.width.toString()+ " height: " +this.height.toString() + "}"; 
     } 
    } // End Class 
} // End package 

Répondre

5

Vous avez nommé votre fonction getter la même que la classe que vous avez importée, je pense que c'est la source de votre erreur.

dans votre classe StockData vous avez la définition

public function get Size():Size 

vous devez renommer « Taille » soit « taille » ou quelque chose qui n'est pas le même nom que la classe que vous avez importé.

+2

Vous pouvez également utiliser le nom qualifié complet pour le type de retour, 'public function get Size(): BaseTypes.Size' –

0

Ajouter le suivant à vos importations StockData que la taille appartient à un package différent.
import BaseTypes.Size;
Si vous utilisez Flash IDE, ajoutez le répertoire contenant votre package BaseType à ClassPath.

+0

Je l'ai fait, mais cela n'aide pas. La même erreur persiste. –

+0

pouvez-vous élaborer sur votre structure de répertoire et la variable de chemin de classe? Si possible, un peu plus de code fera du bien pour comprendre le problème. – bhups

+0

ils sont tous deux dans le même paquet, alors comment cela devrait-il aider? – back2dos

2

Les a souligné le problème. Ce qui suit fonctionnera:

class StockData 
{ 
    private var _size:Size; 
    public function get size():Size { return _size; } 

    public function set size(value:Size):void { 
     _size = value; 
    } 
} 

contrairement à C# où PascalCase est utilisé pour tout, pour les constantes globales et sous_ligne pour noms de paquets par convention en AS3, les gens utilisent UpperCamelCase pour les classes et les interfaces et lowerCamelCase pour tout le reste (ALL_CAPS). comme vous pouvez le voir, le compilateur AS3 ne peut pas résoudre la signification en double de Size. C'est évidemment une faille du compilateur, mais je n'attendrais pas qu'Adobe le corrige. Cependant, en utilisant cette convention, vous pouvez éliminer de telles ambiguïtés. aussi: les vars privés/internes/protégés sont généralement préfixés par _ ou $ pour éviter la collision avec les accesseurs.

Si vous utilisez FlashDevelop, je vous suggère d'utiliser Ctrl + M pour passer aux accolades correspondantes (pas besoin de marquer // End Class). Si vous n'êtes pas, je suggère fortement, vous l'essayez/

Questions connexes