這是我能想到的唯一的東西。事情是知覺。Struct不接受wchar_t
我有一個結構如下:
struct NumPair
{
wchar_t *pFirst, *pSecond;
int count;
與構造函數,拷貝賦值和建設爲
NumPair(wchar_t *pfirst, wchar_t *psecond, int count = 0)
NumPair(const NumPair& np)
NumPair& operator=(const NumPair& np)
這是我的最後一個問題的延伸中,我問了一個辦法對包含特殊(德語)字符(如ü, ä, ö
)的字符指針列表進行排序。
該解決方案似乎使用寬字符類型,但由於某種原因,編譯器會拋出超過一百次的轉換錯誤。
樣品輸入:
// dict_ is a container of NumPairs.
dict_.push_back(NumPair ("anfangen", "to begin, to start"));
編譯器抱怨它不能轉換const char *
到wchar_t
。很好,我把push_back改爲
dict_.push_back(NumPair (wchar_t("anfangen"), wchar_t("to begin, to start")));
編譯錯誤:找不到NumPair ctor,它接受所有參數。
什麼。的。地獄。我嘗試了一個完整的重建,認爲我的VSC++ 10已經崩潰了。不,不要猜測。
我在做什麼錯?
CODE
的構造函數,賦值和拷貝構造都是wchar_t的指針像下面的深層副本。
包括wchar.h。
NumPair(wchar_t *pfirst, wchar_t *psecond, int count = 0)
: count(count)
{
size_t s1, s2;
s1 = wcslen(pfirst);
s2 = wcslen(psecond);
pFirst = new wchar_t[s1];
pSecond = new wchar_t[s2];
wcscpy(pFirst, pfirst);
wcscpy(pSecond, psecond);
}
當您嘗試一次管理多個資源(即字符串)時失敗。我們已經解決了這個問題,它是'std :: wstring'。 – GManNickG 2010-11-01 19:21:39
您需要爲空終止符添加一個字符並處理銷燬。從技術上講,如果第二個新的失敗,第一個永遠不會被刪除(析構函數不會被調用),那麼你的代碼也不是異常安全的。最好使用std :: wstring。 – CashCow 2010-11-02 10:01:02