2010-10-21 3 views
0

У меня есть несколько пользовательских классов. Назовем их «Характер», который должен импортировать и использовать «Голова». Затем «Голова» импортирует и использует «Шляпу». Это прекрасно работает ...1046: Тип не найден, не имеет смысла!

package character 
{ 
import flash.display.MovieClip; 
import flash.events.Event; 
import flash.display.Stage; 
import flash.display.Sprite; 
import flash.events.Event; 
import character.Head; 
import character.Hat; 

public class Character extends MovieClip 
{ 
    // the objects 
    public var _head:Head; 
      // IF I UNCOMMENT THIS, I GET THIS 1046 ERROR 
    // public var asdfasfd:Hat; 

    public function Character():void 
    { 
    trace("NEW CHARACTER"); 

    _head=new Head(stageRef, head_text); 
    //_shirt=new Shirt(stageRef, shirt);  
    } 

} 

} 

, а затем голову:

package character 
{ 
import flash.display.MovieClip; 
import flash.events.Event; 
import flash.display.Stage; 
import character.Hat; 

// the character's head 
public class Head extends MovieClip 
{ 
    public var _hat:Hat; 

    function Head(head_type:String=null):void 
    { 
    trace ("NEW HEAD"); 

    this._hat = new Hat(); 
    } 
} 

} 

И, наконец, класс шляпы:

package character 
{ 
import flash.display.MovieClip; 
import flash.events.Event; 
import flash.display.Stage; 
import character.*; 

// the character's head 
public class Hat extends MovieClip 
{  
    private var stageRef:Stage; 

    function Hat(stageRef:Stage=null, type:String=null):void 
    { 
    trace ("NEW HAT"); 
    } 

} 

} 

Это работает без сучка и задоринки. Простой, как пирог ... Но если я попытаюсь создать новый экземпляр «Hat» или даже определить переменную Hat в «Character», это даст мне ошибку времени компиляции: 1046: Тип не был найден или не был константа времени компиляции: Шляпа.

Если я попытаюсь определить класс «Шляпа» и создать новый экземпляр «Шляпы» в моем основном скрипте или в «Шляпе», он работает как шарм ... Если я попытаюсь сделать это в своем " Характер "он дает мне эту забытую ошибку. Я проверил свой импорт, они все равно! Почему в мире это делает ?! Я буквально потратил впустую целый день на это !!!!!

EDIT/ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: У меня буквально есть 5 почти одинаковых классов, таких как рубашка, брюки, головка, шляпа, рука ... и некоторые из них работают, другие - нет. Я скопировал n 'вставил один из полностью общих классов, который работает над тем, который не делает и все еще ничего. Все они хорошо связаны и экспортируются для ActionScript ... все одинаково, за исключением некоторых работ и других. Но те, которые этого не делают, работают, если я включаю их в классы, которые вызывают, или где-нибудь еще в этом отношении ... просто не в том классе, в котором я нуждаюсь. Я был на том же самом в течение 24 часов. Мне нужен отпуск ....

+0

Кстати, имена файлов совпадают с именами классов. – Cyprus106

+0

Вы уверены, что не используете 'KeyboardEvent' где-нибудь? Не указывает ли ошибка какой-либо файл/строка в вашем коде? – poke

+0

Я IDIOT. Я скопировал и вставил из Google ... Я не знаю, о чем думал. Предполагалось, что константа времени компиляции должна быть «Hat» – Cyprus106

ответ

0

Конструкторы не должны иметь тип возврата. Экземпляр возвращается вызовом конструктора. Поэтому вы должны просто оставить это. Иногда это может вызвать проблемы.

Кроме того, вам не нужно импортировать классы, которые находятся в том же пакете, что и класс, на который вы ссылаетесь.

Я попытался скопировать и вставить код, и это дает мне 3 ошибки:

Character.as(22): col: 21 Error: Access of undefined property stageRef. 

    _head=new Head(stageRef, head_text); 
       ^

Character.as(22): col: 31 Error: Incorrect number of arguments. Expected no more than 1. 

    _head=new Head(stageRef, head_text); 
          ^

Character.as(22): col: 31 Error: Access of undefined property head_text. 

    _head=new Head(stageRef, head_text); 
          ^

Если удалить stageRef и head_text затем компилируется и работает нормально.

Вы пробовали удалить.swf-файлы и повторная компиляция?

+0

Спасибо. Я не знал, что вам не нужно импортировать классы в один и тот же пакет. Хотел бы я знать это раньше! Но классы, которые работают и не все имеют тип возвращаемого значения (ну, все это сделал. Я их всех вытащил, и все импорты для того же пакета ... ничего не изменилось) – Cyprus106

0

Я не уверен, что это будет иметь смысл, но попытаться переименовать пакет (AFAIK имена пакетов не чувствительны к регистру, так что подходит имя класса символов)

0

Это определенно нечетная ошибка, поскольку она не относится к вашим классам. Ошибка упоминает KeyboardEvent, и в вашем коде нет никаких признаков, и нет видимого признака класса, для которого требуется KeyboardEvent.

Просто ради тестирования, вы могли бы изменить эту строку:

import flash.events.Event; 

Для этого:

import flash.events.*; 

Конечно, это не решает проблему, но если ошибка уходит, вам возможно, придется отслеживать этот KeyboardEvent в вашем коде.

Смежные вопросы