2012-06-22 8 views
6

MSVS 2010 SP1 kapsamında iyi çalışan bir projem var. MSVS 2012 RC'ye dönüştürmeye çalışıyorum. C++ başlık/lib yolları ve MFC özel şeyler ile ilgili bazı şeyleri değiştirmek zorunda kaldım. Ama temizlemek için son bir engelim var.MSVS 2010 projesini MSVS 2012 RC'ye dönüştürme ancak hata alma "C++ standardı bu tür bir karma sağlama sağlamıyor"

MSVC 2010'da çok fazla unordered_map<basic_string<TCHAR>, int> veya map<basic_string<TCHAR>, int> kullanıyorum. İyi derler. Ancak MSVS 2012'de, bu hatayı aldım: "C++ standardı bu tür bir karma sağlama sağlamıyor"

Ağda biraz arama yaptıktan sonra, MSVS 2012 uygulamasının daha yakın olması gerektiğini öğrendim. C++ 11 standardı ve standardın sadece temel türleri ve 4 tanımlı dize türleri için karma işlevlerini tanımları (aralarında string ve wstring, ancak basic_string dahil değildir). Tüm basic_string<TCHAR>'u wstring olarak değiştirdim ancak boşuna ... Hala aynı hatayı alıyorum.

Uygulamamı yeniden derleyebilmem için ne yapmalıyım?

+0

Muhtemelen VS2010'da multibyte devre dışı bırakılmış, bu yüzden 'TCHAR', 'char' ile eşleştirilmiştir ve artık çok baytlı karakterleri etkinleştirilmiştir, böylece 'TCHAR', 'wchar_t' ile eşleşmektedir. Bu özellikleri proje özelliklerinde değiştirmeyi deneyin. – RedX

+1

'basic_string ' proje ayarlarınıza bağlı olarak 'std :: string' veya' std :: wstring' (her ikisi de sadece typedefs) 'dir. C++ 11'deki tek fark, "hash <>" dizesinin şimdi "" ve "" değil olmasıdır. –

+0

Teşekkürler Bo, 'u her yere eklemeliydim, daha önce yapmam gerekmiyordu. Cevap vermeden önce 6 saat beklemek zorundayım ... Bu arada, kendiniz yapmaktan çekinmeyin :) – OOEngineer

cevap

8

Görünüşe göre OOEngineer, <string> başlığını eklemeden basic_string kullanıldı. İşlevselliğin bir kısmı, başka başlıklar tarafından dolaylı olarak içerilenler aracılığıyla zaten görünür olabilir.

VS2010 piyasaya sürüldüğünde, önerilen standart, <functional> başlığındaki tüm std::hash<> uzmanlıklarını koydu. Nihai C++ 11 standart olarak o, bu nedenle bazı hash<> uzmanlık <string>, <vector> taşındı, ilgili konteyner ile birlikte bu koymak daha iyi olduğuna karar verildi vb

Yani, kullanılan tüm (veya herhangi, gerçekten) std::string'un işlevselliği, <string> başlığını kendiniz dahil etmeli ve bunu yaparken başka bir sistem üstbilgisine güvenmemelisiniz.

İlgili konular