2012-08-12 29 views
1

我下面是char_t VS中現有的全局typedef嗎?

namespace settings{ 
    #if defined(WIN32) && !defined(UNIX) 
    typedef wchar_t char_t; 
    #elif defined(UNIX) && !defined(WIN32) 
    typedef char char_t; 
    #else 
    typedef char char_t; 
    #endif 
    typedef std::basic_string<char_t> string_t; 
    typedef std::basic_ostream<char_t> stream_t; 
} 

我一直是這樣的,我可以改變整個應用程序回吐聊天WCHAR。它在Linux中工作,但是當我試圖在VS 2010中編譯相同的代碼時它給了我

錯誤C2371:'settings :: char_t':redefinition;不同的基本類型 看到「設置:: char_t」

我所有的代碼使用settings::char_tsettings::string_t等的聲明。現在我需要改變我的代碼?或者有一些更簡單的出路?

回答

0

即使它是一個全球性的,你的typedef封閉在namespace setting,你會得到更多這方面的信息。你確定這個文件沒有在項目中被定位兩次嗎?

+0

你是什麼對象而定兩次是什麼意思?雙重包含是不可能的,因爲頭文件有'ifndef/def'定義 – 2012-08-12 14:55:54

+0

哦!是。我很確定。 IDE沒有創建用於保護雙重包含的定義。謝謝 – 2012-08-12 14:59:13

+0

但爲什麼它沒有在Linux下的GCC中引發任何錯誤? – 2012-08-12 15:02:40