2012-03-02 12 views
5

Próbuję odczytać plik tekstowy UTF-8 w Visual C++ 2010 przy użyciu tylko standardowej biblioteki, a nie funkcji API Boost lub Windows. Zdefiniować ustawienia regionalne jako:Ustawienia regionalne UTF-8 w Visual C++ 2010

std::locale utf8_locale(std::locale(), new std::codecvt_utf8<wchar_t>); 

ale wynika to w następujący błąd kompilatora:

error C2661: 'std::locale::facet::operator new' : no overloaded function takes 3 arguments 
error C2664: 'std::locale::locale(const char *,std::locale::category)' : cannot convert parameter 1 from 'std::locale' to 'const char *' 
+4

Musisz naprawić swój kod, aby nie uzyskać błędu kompilacji. –

+0

Pokaż nam błąd kompilatora i nieco więcej kodu. – Kieveli

+0

Dodałem błąd kompilatora do pytania – AMCoded

Odpowiedz

5

Błąd jest occures w trybie debugowania, gdy kod jest używany w pliku, który Micrsoft Visual C++ podanym poniżej makro jest umieszczone.

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 

, aby pozbyć się tego błędu, #define new DEBUG_NEW należy wykomentowane lub kod powinien być realizowany w innym pliku, który nie posiada wyżej makro. Ten błąd Visual C++ 2010 wspomniano tu http://connect.microsoft.com/VisualStudio/feedback/details/683483/mfc-c-fails-to-compile-use-of-codecvt-utf8-in-debug-configuration

+0

To tylko problem dla MFC. Jeśli nie używasz MFC, nie łącz z bibliotekami MFC. I tak, jest on zdefiniowany tylko dla wersji debugowania bibliotek MFC. –

+0

FWIW i IIRC, w C++ jest niedozwolone definiowanie makra z nazwą zastrzeżonego słowa, takiego jak "nowy". Więc ten kod jest kolejnym nadużyciem C++ przez MFC. – rodrigo

3

FYI, inna praca wokół jest po prostu napisać

std::locale utf8(std::locale(), ::new std::codecvt_utf8<wchar_t>); 

To zmusi kompilator do korzystania z globalnej nowa, zamiast locale nowy

Powiązane problemy