2010-02-09 57 views
2

问题:我得到一个恼人的错误: 我尝试在下面的动作代码中使用类型大小。 但我总是得到这个错误:
1046:未找到类型或不是编译时常量:大小。
但无论我怎么努力,似乎打破当我添加
实现public function get尺寸():大小
不知怎的,它不喜欢的返回类型的大小,但我究竟做错了什么?Flash ActionScript 3不接受编译时常量

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 

我在文件夹BaseTypes中的波纹管代码,它是在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 

回答

5

您已将您的getter函数命名为您导入的类,我认为这是您的错误的来源。

在StockData类,你必须定义

public function get Size():Size 

你应该“大小”重命名为不是“大小”或东西是不一样的名字,你导入的类。

+2

或者,您可以使用返回类型的全限定名称,'public function get Size():BaseTypes.Size' – 2011-10-27 10:38:28

0

将以下内容添加到您的StockData导入中,因为Size属于不同的包。
import BaseTypes.Size;
如果您使用的是Flash IDE,那么将包含BaseType包的目录添加到ClassPath中。

+0

我做到了,但这并没有帮助。同样的错误依然存在。 – 2010-02-09 09:05:54

+0

你能说说你的目录结构和类路径变量吗?如果可能的话,稍微多一点的代码会很好地理解这个问题。 – bhups 2010-02-09 09:59:29

+0

他们都在同一个包,所以这应该如何帮助? – back2dos 2010-02-09 11:36:29

2

Les指出了这个问题。下面的工作:

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

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

不像在C#中,其中PascalCase用于一切,在AS3惯例,人们使用UpperCamelCase类和接口和lowerCamelCase约一切(ALL_CAPS为全局常量和under_scores的包名)。如您所见,AS3编译器无法解析Size的重复含义。这显然是一个编译器缺陷,但我不会等到Adobe修复它。然而,使用上述惯例,你可以消除这样的歧义。另外:私人/内部/受保护的变量通常以_$为前缀,以避免与访问者发生冲突。

如果您使用FlashDevelop,我建议您使用Ctrl + M跳转到匹配大括号(无需标记// End Class)。如果你不是,我强烈建议,你给它一个尝试/