Flash Actionscript 3 не принимает константу времени компиляции - PullRequest
2 голосов
/ 09 февраля 2010

Вопрос: я получаю досадную ошибку: Я пытаюсь использовать тип Size в приведенном ниже коде ActionScript. Но я всегда получаю эту ошибку:
1046: Тип не найден или не был константой времени компиляции: Размер.
Но независимо от того, что я пытаюсь, кажется, что сломается, когда я добавляю
публичная функция получить Размер (): Размер
Как-то не нравится возвращаемый тип 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 ]

5 голосов
/ 09 февраля 2010

Вы назвали свою функцию получения так же, как класс, который вы импортировали, я думаю, что это источник вашей ошибки.

в вашем классе StockData у вас есть определение

public function get Size():Size

Вы должны переименовать «Size» в «size» или в другое имя, отличное от имени импортированного вами класса.

2 голосов
/ 09 февраля 2010

Лес указал на проблему. Будет работать следующее:

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). Если нет, я настоятельно рекомендую, попробуйте /

0 голосов
/ 09 февраля 2010

Добавьте следующее к вашему импорту StockData, поскольку Size принадлежит другому пакету.
import BaseTypes.Size;
Если вы используете Flash IDE, добавьте каталог, содержащий ваш пакет BaseType, в ClassPath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...