web-dev-qa-db-ja.com

文字列がスコープ内で宣言されていない理由

私は次のコードを持っています:

#include <string>
#include <boost/thread/tss.hpp>

static boost::thread_specific_ptr<string> _tssThreadNameSptr;

次のエラーが表示されます

g ++ -c -I $ BOOST_PATH tssNaming.h

tssNaming.h:7:エラー: 'string'はこのスコープで宣言されていません

しかし、#includeに文字列を含めています。

21
Jimm

std名前空間にあるため、std::stringを使用する必要があります。

44
Rapptz

stringstd名前空間にあります。次のオプションがあります。

  • 書く using namespace std;インクルードの後、すべてのstd名を有効にします。プログラムにはstringのみを記述できます。
  • 書く using std::stringインクルードの後に​​std::string:プログラムにstringのみを書き込むことができます。
  • 使用する std::stringの代わりにstring
7
user1434698

私はそれを見つける:

using namespace std;

C++コードでは、特にstd ::文字列が必要な状況でのデバッグに多くの時間を節約でき、コードをクリーンに保つのにも役立ちます。

これを念頭に置いて、コードは次のようにする必要があります。

#include <string>
using namespace std;
#include <boost/thread/tss.hpp>

static boost::thread_specific_ptr<string> _tssThreadNameSptr;
0
Nuelsian