2011-03-02 31 views
12

私はbasic_string<TCHAR>をしようとしています。しかし、叫んでエラーを投げている。どうすればいいか分かりますか?std :: basic_stringの使い方<TCHAR>

+3

あなたは、いくつかのサンプルコード、およびまたあなたが取得している正確なエラーを与えることができますか? –

+0

エラーを処理するときは、達成したいこと、エラーが報告された正確なコード、コンパイラ/リンカエラーを記述します。その情報は他の人があなたを助けるのに役立ちます。 –

答えて

6

TCHARは、アプリケーションで使用されている文字タイプのwinapi定義です。文字セットがマルチバイト文字の場合は、charになります。 Unicodeに設定した場合は、wchar_tになります。

wchar_tの場合は、std::wcoutを使用する必要があります。それ以外の場合は、単なる平文std::coutが問題ありません。

一般的にはまた、あなたが取得しているが、最も可能性の高いあなたはstd::coutstd::basic_string<wchar_t>を挿入しようとしている、おそらくそのためoperator<<過負荷が存在しないもの、エラーを説明するのに役立ちます。

19

ドーフィックは、広い文字列の場合はstd::wcout、狭い場合はstd::coutと言います。代わりにTCOUT場所での使用にこれにより

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

:あなたは(TCHARは、この種のものを容易にするためのものです)、文字列のいずれかのタイプのためにコンパイルすることができるようにしたい場合はこのようなものは、時には人生をより容易にします。

+5

また、厄介な#defineを使用する代わりに、正しいストリームへの参照としてtcoutを宣言することもできます。 :-) –

+1

@ボ・ペルソン:ああ、清教徒。 :-) – Steve

0

@Bo Perssonのは、正しいストリームタイプ参照を使用することになるtcoutタイプを定義する別の方法を述べたように。これを行う際にはさらにいくつか考慮すべき事項がありますが、複数の定義や欠落した定義のためにリンカーの問題に直面することがあります。私は、ヘッダー内外部参照として、これらのタイプを宣言し、ソースファイルにそれらを一度を定義しているために働く何

。これはプリコンパイル済みヘッダー(stdafx)でも機能します。

ヘッダー

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

実装

namespace std 
{ 
#ifdef UNICODE 
    wostream& tcout = wcout; 
#else 
    ostream& tcout = cout; 
#endif // UNICODE 
} 
関連する問題