2011-05-05 73 views
0

我新的目標C.Macros->目標C

#define DECLARE_RS232_NEWMSG(ClassID) 

    enum {ID = ClassID}; 

    @interface data_derived : data { 

    @public 
    DECLARE_RS232_NEWMSG(RM_REQUEST_SESSION) //RM_REQUEST_SESSION = 0x11 declared as enum(which is a const) 

    } 

    @end 

Error:'ClassID undeclared here'

這是爲什麼錯誤。

回答

2
An enumeration consists of a set of named integer constants 

ClassID不是一個固定的權利?

我們可以給

enum {ID = 0}; 

,我們也可以給

我們不能給

enum {ID = ClassID}; 

因爲的ClassID不是constant..See thisthis鏈接

編輯:看到評論

,而不是在宏功能設置的ClassID後,從宏觀返回intented值並分配值的文件本身的ClassID宏觀.. 看我怎麼做了一個例如here..It爲目標C A C code..but預處理器邏輯類同..

#define max(A,B) ((A) > (B) ? (A):(B)) 
#define MYVAL max(2,3) 

enum{ 
    FIRSTVALUE = MYVAL, 
    OTHERTHING 
}; 

void main(){ 
printf("%d and %d",SOMETHING,OTHERTHING); 
return; 
} 

希望這有助於..

+0

@Krishnabhadra:我編輯了我的代碼。請查看需要更改的內容.ClassID僅聲明爲常量。 – Angus 2011-05-05 07:20:25

+0

什麼是你的要求什麼這DECLARE_RS232_NEWMSG確實 – Krishnabhadra 2011-05-05 07:23:03

+0

ID = ClassID(ClassID將採取任何IDValue eg.RM_REQUEST_SESSION = 0x11或RM_RESPONSE = 0x12 od RM_RES = 0x13此值通過DECLARE_RS232_NEWMSG(ClassID)宏)傳遞。我的要求是獲取在運行時傳遞的任何消息ID值。 – Angus 2011-05-05 07:35:13

0

嗯,因爲ClassID可能沒有在那裏聲明。宏定義只擴展到行尾(除非行的末尾與\一起轉義),所以你的第二行是而不是宏的聲明的一部分,因此宏的形式參數沒有在那裏定義。換句話說,您剛剛聲明瞭一個擴展爲空的宏DECLARE_RS232_NEWMSG,並嘗試使用未定義的ClassID聲明符號常量(全局)ID。

+0

@interface data_derived:數據{ \t @public \t DECLARE_RS232_NEWMSG(RM_REQUEST_SESSION) } 我已經在另一個文件中將RM_REQUEST_SESSION = 0x11定義爲枚舉;我只在這裏傳遞ClassID而不是ClassName。對此我傳遞ClassId但仍然得到相同的錯誤。 – Angus 2011-05-05 06:58:19