2011-03-29 57 views
0

我有一個外部工具,它根據用戶輸入生成一個ENUM。現在這個ENUM被我的C++代碼使用,我必須根據一個變量say'x'來選擇一個特定的ENUM。生成的ENUMS形式爲'ENUM_1','ENUM_2','ENUM_3'...等等。現在我想要代碼中的代碼,以便根據'x'選擇合適的ENUM。我嘗試使用strcat的功能,如:如何在ENUM中使用strcat?

typedef enum (enum_1, enum_2, enum_3...enum_n) map1; 

y=(map1)strcat("enum_", x); 

,但它給我的錯誤「無法從字符*轉換爲MAP1

可有人請提出實現這一目標的方法

三江源

回答

1

你不能做到這一點使用strcat。從說明我的理解是,你要x轉換爲map1。要做到這一點,你可以做map1 m = (map1)(x-1);見此示例代碼:

typedef enum { enum_1, enum_2, enum_3} map1; 

int main() 
{ 
    int x = 1; 
    map1 m = (map1)(x-1); 
} 

-1是因爲需要,枚舉的整數值map1從0開始

0

現在我想我的代碼裏面的代碼,這樣相應的ENUM是基於選擇在'x'上。

枚舉值是常量基於所述發言我假定x是整數數據類型。

y=(map1)strcat("enum_", x); 

strcat(..)傳遞參數的類型應該是char*。根據之前的說法,x不是char*類型。不清楚你爲什麼使用strcat來完成這項任務。

回答您的主題行:您不能使用具有枚舉值的strcat。

1

你不能這樣做。那麼你不能這樣做......

枚舉不在編譯時按名稱評估。你必須用預處理器來嘗試一些東西。你可以創建一個定義來做類似的事情。喜歡的東西:

#define fn(x) enum_##x 

然後調用

fn(x) 

但是,當文件被預處理髮生這種情況。所以你不能訪問運行時變量。根據你的代碼判斷,我認爲你不會做你想做的事。 雖然好運。

+1

名稱修改不適用於枚舉值,也不是由預處理器完成的。這可能是他想要的伎倆,儘管...... – Potatoswatter 2011-03-29 05:50:00