3

便利な tstring を自分で typedef しようとすると問題が発生します (以下を参照)。

#ifndef _NISAMPLECLIENT_H_
#define _NISAMPLECLIENT_H_

#include <windows.h>
#include <stdlib.h>
using namespace std; // ERROR here (1)

#ifdef _UNICODE
#define CommandLineToArgv CommandLineToArgvW
#else
#define CommandLineToArgv CommandLineToArgvA
#endif

typedef basic_string<TCHAR> tstring; // ERROR HERE (2)

これをコンパイルしようとすると、コンパイル エラーが発生します。「ERROR here (1)」のエラーは次のとおりです。

エラー 3 エラー C2871: 'std': この名前の名前空間は存在しません \nisampleclient\nisampleclientdefs.h 16

宣言を削除してusing namespace std;ERROR HERE (2) を次のように変更するとtypedef std::basic_string<TCHAR> tstring;、エラーが発生します。

エラー 3 エラー C2653: 'std' : クラスまたは名前空間の名前ではありません \nisampleclient\nisampleclientdefs.h 23

代わりにその時点で。

前もって感謝します。:)

4

2 に答える 2

7

stringヘッダー ( #include <string>string.h ではなく ;)) を含めます。

また、絶対に使用しないでください:

using namespace ...

...仲間の開発者の怒りを呼び起こしたくない場合を除き、ヘッダーで ;)

補足: C++ では、従来の C 標準ヘッダーのほとんどに対応する部分.hがあり、拡張子はありませんが、先頭にc. #include <cstdlib>実際の違いがあるかどうかは、使用するコンパイラによって異なりますが、あなたの場合はより良い選択です。

于 2011-02-24T15:14:22.783 に答える
5

std::basic_stringクラス テンプレートは 3 つの引数を取ります。だからあなたはこれをしなければなりません:

 #include <string> //include this

 typedef std::basic_string<TCHAR, std::char_traits<TCHAR>, std::allocator<TCHAR> > tstring;
于 2011-02-24T15:14:40.293 に答える