2011-03-02 10 views
12

Estoy tratando de cout un basic_string<TCHAR>. Pero cout está arrojando un error. ¿Puedo saber cómo hacerlo?Cómo citar el std :: basic_string <TCHAR>

+3

¿Puede dar un código de ejemplo, y también el error exacto que está recibiendo? –

+0

Cuando se trata de un error, indique lo que desea lograr, el código exacto donde se informa el error y el error del compilador/vinculador. Esa información ayudará a otros a ayudarlo. –

Respuesta

6

TCHAR es una definición de winapi para el tipo de carácter utilizado por su aplicación. Si tiene el carácter configurado como caracteres de varios bytes, será char. Si lo tiene configurado en Unicode, será wchar_t.

Si es wchar_t, necesita usar std::wcout. De lo contrario, simplemente std::cout debería estar bien.

lo general, ayuda a explicar también lo que los errores que está recibiendo, pero lo más probable es que estamos tratando de insertar un std::basic_string<wchar_t> en std::cout, y probablemente no es una sobrecarga operator<< para eso.

19

Como dijo dauphic, std::wcout es para cuerdas anchas y std::cout para angostas. Si usted quiere ser capaz de compilar para cualquier tipo de cadena (TCHAR está destinado a hacer este tipo de cosas más fácil) algo como esto a veces hace la vida más fácil:

#if defined(UNICODE) || defined(_UNICODE) 
#define tcout std::wcout 
#else 
#define tcout std::cout 
#endif 

Con esto en lugar de utilizar tcout lugar.

+5

También podría declarar tcout como una referencia a la transmisión correcta, en lugar de usar desagradables #defines. :-) –

+1

@Bo Persson: Ahh, un puritano. :-) – Steve

0

Como se ha mencionado @Bo Persson, otra manera de definir un tipo de tcout estaría utilizando referencias con los tipos de trenes correctas. Aunque hay algunas cosas más que considerar al hacer eso, ya que terminará fácilmente con problemas de vinculador debido a las definiciones múltiples o faltantes.

Lo que funciona para mí está declarando estos tipos como referencias externas en una cabecera y definiéndolos vez en un archivo de origen. Esto también funciona en un encabezado precompilado (stdafx).

Cabecera

namespace std 
{ 
#ifdef UNICODE 
    extern wostream& tcout; 
#else 
    extern ostream& tcout; 
#endif // UNICODE 
} 

Implementación

namespace std 
{ 
#ifdef UNICODE 
    wostream& tcout = wcout; 
#else 
    ostream& tcout = cout; 
#endif // UNICODE 
} 
Cuestiones relacionadas