Flash Actionscript 3不接受编译时常量

时间:2010-02-09 08:16:01

标签: flash actionscript-3

问题:我收到一个恼人的错误: 我尝试在下面的actionscript代码中使用类型大小。 但我总是得到这个错误:
1046:未找到类型或不是编译时常量:大小。
但无论我尝试什么,当我添加时它似乎都会破裂
public function get Size():Size
不知怎的,它不喜欢返回类型Size,但是我做错了什么?

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

3 个答案:

答案 0 :(得分:5)

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

在您的StockData类中

,您有定义

public function get Size():Size

您应该将“尺寸”重命名为“尺寸”或与您导入的类名称不同的名称。

答案 1 :(得分:2)

莱斯指出了这个问题。以下内容适用:

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修复它。但是,使用所述约定,您可以消除这种歧义。另外:private / internal / protected vars通常以_$为前缀,以避免与访问者发生冲突。

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

答案 2 :(得分:0)

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

相关问题