PDA

Просмотр полной версии : Конфликт имен


riden
11.09.2007, 20:17
Есть некий класс, который называется Math. Внутри этого класса используется Top Level класс флеш плеера Math.
package toppack
{
public final class Math
{
static public function met(a:int):int{
var b:int = Math.floor(a/2); //здесь компилятор думает, что Math - это toppack.Math
return b;
}

}
}

А вот главный класс проекта:
package {
import flash.display.Sprite;
import toppack.Math;

public class Test_names extends Sprite
{
public function Test_names()
{
trace(Math.met(19));
}
}
}
При компиляции выдаются ошибки:
Can not resolve a multiname reference unambiguously. Math (from E:\Programming\Flex Builder 2\Flex SDK 2\frameworks\libs\playerglobal.swc(Math)) and toppack:Math (from D:\_My Projects\FLASH\Flex Builder workspace\Testing\Test_names\toppack\Math.as) are available.

1120: Access of undefined property Math

1061: Call to a possibly undefined method floor through a reference with static type Class.

Я даже понимаю откуда эти ошибки: компилятор считает что Math является класом toppack.Math (когда мне нужно использовать встроенный Math).
Как избавится от этих ошибок без переименовывания своего класса toppack.Math?
Flex проект:

BlooDHounD
11.09.2007, 21:02
нельзя использовать названия топ-левел классов при создании своих.

riden
11.09.2007, 21:04
Прискорбно. Спасибо за ответ.

P.S.: Хотя непонятно почему. Ведь Math и toppack.Math - разные классы. Но компилятор тупо думает, что Math == toppack.Math. Далее, следовательно он ненаходит нужные методы. И выдает ошибку, что мол не может понять какой класс вы имеете ввиду (Math или toppack.Math).
P.S.2: Если написать так - trace(toppack.Math.met(19)), то первая и вторая ошибки исчезают, но остается ошибка в том месте где я прокоментировал в коде. Нельзя никак указать компилятору, что Math - это Math, а не toppack.Math?

etc
12.09.2007, 02:47
Нельзя, потому что Math лежит в глобальном пакете и текущий класс перекрывает его.