PDA

Просмотр полной версии : Не работает выражение


A.E.M.
25.04.2012, 15:58
package{
import flash.display.MovieClip;

public class Client extends MovieClip{

public function Client(){

var root:Composite = new Composite("root");

root.add(new Composite("node 1"));
root.getChild(1).add(new Leaf("leaf 1")); // при наличии вот этой строки появляется ошибка

}
}
}

ошибка в панели output TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at Client()

bublic_bicubic
25.04.2012, 15:59
root.getChild(1) = null скорее всего

A.E.M.
25.04.2012, 16:06
root.getChild(1) = null скорее всего

Да, действительно. Но не понятно почему.

Вот код Composite.as
package{

public class Composite extends Component{

private var sName:String;
private var aChildren:Array;

public function Composite(sNodeName:String){
this.sName = sNodeName;
this.aChildren = new Array();
}

override public function add(c:Component):void{
aChildren.push(c);
}

override public function operation():void{
trace(this.sName);
for each (var c:Component in aChildren){
c.operation();
}
}

override public function getChild(n:int):Component{
if((n > 0) && (n < aChildren.length)){
return aChildren[n-1];
} else {
return null;
}
}
}
}

Добавлено через 10 минут
нашел, не override public function getChild(n:int):Component{
if((n > 0) && (n < aChildren.length)){, а override public function getChild(n:int):Component{
if((n > 0) && (n < aChildren.length+1)){

Wolsh
25.04.2012, 17:32
Название темы не отражает сути вопроса.