2017-03-31 28 views
-1

我有以下結構定義不能結構

頭文件中訪問枚舉:

struct SDK { 
    enum { 
     HEADER0 = 0, 
     HEADER1, 
     LINGO, 
     COMMAND, 
     LENGTH, 
     ACK_CMD, 
     ACK_STATUS 
    }commandFormat; 
}mySDK; 

,我想用這樣的:

的main.c

switch (rxData[mySDK.commandFormat.LINGO]) { 
    default: 
     break; 
} 

我得到的錯誤:請求成員'LINGO'的東西不是結構或工會

我知道我可能在做一些愚蠢的事情,但我搞不清楚究竟是什麼。謝謝。

回答

0

剛寫

switch (rxData[mySDK.commandFormat]) { 

提供該對象mySDK的數據成員commandFormat中尤其被初始化LINGO

或者寫

switch (rxData[INGO]) { 
+0

我想訪問由commandFormat的特定成員指向的索引,而不必嵌套if/else。 –

+0

@IanOswald看到我更新的帖子。 –

+0

這不會工作,因爲它不是結構的成員,並顯示爲「無法解析標識符」。 –

1
struct SDK { 
    enum { 
     HEADER0 = 0, 
     HEADER1, 
     LINGO, 
     COMMAND, 
     LENGTH, 
     ACK_CMD, 
     ACK_STATUS 
    }commandFormat; 
}mySDK; 

創建整在全球範圍常數

HEADER0, 
    HEADER1, 
    LINGO, 
    COMMAND, 
    LENGTH, 
    ACK_CMD, 
    ACK_STATUS 

它還定義

struct SDK { 
    enum <anonymous> commandFormat; 
}; 

其中調試程序將解釋的commandFormat的值作爲一個以上的整數常數, 它定義了結構命名mySDK的一個實例。

mySDK.commandFormat是一個整數(枚舉)。 將.應用於它是沒有意義的。

+0

可以告訴區別嗎? –

+0

@MuhammadRezaIrvanda沒有區別,AFAIK。我認爲只有C++嵌套枚舉。在普通的C中,他們總是進入文件範圍。 – PSkocik

+0

@MuhammadRezaIrvanda是的,我測試了它。在C中,常量泄漏到文件範圍,而在C++中,它們可以通過'SDK :: HEADER0'等訪問,或者從SDK成員函數中訪問(如果有)。 – PSkocik