2013-04-10 51 views
1

在我的項目中,我有simple_xxxx.c,它不是系統線程安全版本,因此創建一個系統線程等效項,我創建了sys_xxxx.cpp;整個C代碼在名爲MyNameSpace的名稱空間內被捕獲。在該文件中,我沒有包含simple_xxxx.h,以免在編譯時產生混淆,但包含sys_xxxx.h以獲取我的.cpp文件的聲明。雖然這樣做,我得到了編譯錯誤的下面的枚舉,這讓int困惑,甚至認爲它是在名稱空間內聲明。名稱空間中的數據類型轉換無效

任何建議是最歡迎這個請。

// xxxx.h 

namespace MyNameSpace { 

typedef enum { 
    FormatFlags_LeftAlign = (1 << 0), // 1 
    FormatFlags_SignPrefix = (1 << 1), // 2 
    FormatFlags_SpacePrefix = (1 << 2), // 4 
    FormatFlags_ZeroPad  = (1 << 3), // 8 
    FormatFlags_Format  = (1 << 4) // 16 
} FormatFlags; 


bool string_AppendFormatted(UnicodeString_s*, UnicodeString_s*, void*); 

} 


///xxxx.cpp 

namespace MyNameSpace { 

bool string_AppendFormatted(UnicodeString_s*, UnicodeString_s*, void*) 
{ 
     FormatFlags eFlags = (FormatFlags)0; 

      case '-': 
4086:   eFlags |= FormatFlags_LeftAlign; 
       break; 
      case '+': 
4089:   eFlags |= FormatFlags_SignPrefix; 
       break; 
      case '0': 
4092:   eFlags |= FormatFlags_ZeroPad; 
       break; 
} // method 

} // namespace 


xxxx.cpp: In function 'bool MyNameSpace::string_AppendFormatted(MyNameSpace::UnicodeString_s*, MyNameSpace::UnicodeString_s*, void*)': 
xxxx.cpp:4086: error: invalid conversion from 'int' to 'MyNameSpace::FormatFlags' 
xxxx.cpp:4089: error: invalid conversion from 'int' to 'MyNameSpace::FormatFlags' 
xxxx.cpp:4092: error: invalid conversion from 'int' to 'MyNameSpace::FormatFlags' 

回答

0

這樣做可以讓我解決這個問題。 eFlags =(FormatFlags)(eFlags | FormatFlags_LeftAlign);

如果我聲明枚舉類型爲int;它會對我的代碼造成進一步的問題(這裏沒有顯示)。

0

更換

FormatFlags eFlags = (FormatFlags)0; 

int eFlags = 0; 

由於錯誤消息說,你可以不投枚舉的組合,這是一個int,回到一個枚舉(注意到您的枚舉定義中未定義這些組合的值)。

+0

將FormatFlags轉換爲int會導致eFlags提供給函數的其他語句拋出錯誤。這是我解決這個問題的方法。無論如何感謝您的回答。 eFlags =(FormatFlags)(eFlags | FormatFlags_LeftAlign); – rajeshk 2013-04-10 10:11:08

+0

這取決於你,我沒有看到其餘的代碼,雖然...考慮接受另一個答案時,讓定時器讓你這樣做,因爲它符合你的需要。 – didierc 2013-04-10 10:16:07

1

在C++中沒有從intenum的隱式轉換,請使用int來存儲標誌。另外,你可以聲明枚舉爲enum FormatFlags{ /* values */ };,typedef只需要C.

+0

剛剛瞭解了CPP枚舉處理;這與C的方式略有不同。無論如何,我的編譯錯誤消失了,我很高興。感謝您的回答。 eFlags | = FormatFlags_LeftAlign; 替換爲 eFlags =(FormatFlags)(eFlags | FormatFlags_LeftAlign); – rajeshk 2013-04-10 10:01:40

相關問題