2012-09-01 42 views
14

Tôi có đoạn mã sau:tại sao chuỗi không khai báo trong phạm vi

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

static boost::thread_specific_ptr<string> _tssThreadNameSptr; 

tôi nhận được lỗi sau

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

tssNaming.h:7: error: 'string' was not declared in this scope

Nhưng tôi bao gồm chuỗi trong #include tôi.

+2

thêm std :: trước khi chuỗi – innochenti

+1

trùng lặp có thể xảy ra [C++ lỗi: 'string' vẫn chưa được công bố] (http://stackoverflow.com/questions/2890860/c- error-string-has-not-declaration) – juanchopanza

Trả lời

32

Bạn phải sử dụng std::string vì nó nằm trong không gian tên std.

+0

Tys, đã hoạt động !! – Jimm

6

string nằm trong không gian tên std. Bạn có các tùy chọn sau:

  • Viết using namespace std; sau bao gồm và cho phép tất cả các std tên: sau đó bạn có thể viết chỉ string trên chương trình của bạn.
  • Viết using std::string sau khi bao gồm để bật std::string: sau đó bạn chỉ có thể viết string trên chương trình của mình.
  • Sử dụng std::string thay vì string
+1

Bạn nên sử dụng 'using namespace std' hoặc 'using std :: string' một cách tiết kiệm và trong phạm vi giới hạn (ví dụ, bên trong một hàm). Không bao giờ sử dụng nó trong một tiêu đề, vì nó sẽ gây ô nhiễm không gian tên chung với các ký hiệu mà người dùng tiêu đề của bạn có thể không muốn. – alexc

Các vấn đề liên quan