2015-04-16 73 views
0

我正在嘗試更新由一個主文件和導入的AS3類組成的小型Flex AS3「項目」。不幸的是,在編譯期間,我得到錯誤1120:訪問未定義的屬性DEBUG。和編譯失敗。我已經使用Flex SDK 4.6和Flash Builder 4.5中的mxmlc並獲得相同的失敗。FLEX:公共靜態常量未導入,未定義

Flex並不是我的強項,所以我希望有人能指出錯誤。從我所瞭解的這個源代碼在2011年使用mxmlc編譯得很好。從導入文件

相關代碼:

package { 
public class krpano_as3_interface { 
    public static var instance:krpano_as3_interface = null; 
    . 
    . 
    static public const STARTDEBUGMODE : int = 0xFF; 
    static public const DEBUG   : int = 0;  

,並從主AS3文件:

package { 
. 
import krpano_as3_interface; 
public class soundinterface extends Sprite { 
    static public var krpano : krpano_as3_interface = null; 
    . 
    public function soundinterface() { 
     if (stage == null){ 
     }else{ 
      txt.htmlText = "krpano " + DEBUG::version + "\n\n" + 
          "<b>soundinterface plugin</b>" + 
          "\n\n(build " + DEBUG::builddate + ")"; 
     } 
    } 

如果我重命名或移動導入文件的編譯器抱怨說,它缺少。定義常量DEBUG的類應該被導入,爲什麼它不起作用?

回答

0

定義常量DEBUG的類應該被導入,爲什麼它不起作用?

因爲它們之間沒有任何關係。

DEBUG::version 

static public const DEBUG   : int = 0; 

是你的代碼的兩個不相關的部分。

有兩個提示中的語法:

  1. 的:: name qualifier操作員站命名空間之後,所以無論DEBUG是,這是一個命名空間,它的公共靜態常量不是(這是一個int
  2. 訪問屬性version。公共靜態常量不具有 具有這樣的屬性。

你在看什麼是conditional compilation,其中(除其他外)允許您指定值並將它們傳遞給編譯器以執行編譯過程。

您也可以通過字符串和數字技術的應用和爲內聯常數

在你的情況下使用它們,你要定義一個版本的編譯參數不變。事情是這樣的:

-define+=DEBUG::version,"5" 

這可能是因爲版本號是由一些構建腳本(製作,螞蟻什麼的),因此將信息傳遞給編譯器維持。

我強烈建議您在開始工作之前先與該項目的開發人員聯繫,以瞭解該項目的構建過程應如何工作。

+0

非常感謝您的詳細解釋。實際上非常具有啓發性。爲了我的直接目的,最簡單的解決方案可能是註釋掉有問題的代碼。其實我已經這樣做了,所以我可以用我的修改進行編譯。如果有必要,我可以更直接地遵循你的建議。 說真的,非常感謝。 –

+0

好消息是,您將能夠追蹤所有這些編譯器常量,因爲您的代碼在您執行之前無法編譯。與你給出的例子不同,這些常量可以用來打開/關閉部分代碼,以根據平臺等提供特定的功能。在這種情況下,你必須仔細修復它們。 – BotMaster