【问题标题】:why is string not declared in scope为什么没有在范围内声明字符串
【发布时间】:2012-08-27 03:30:03
【问题描述】:

我有以下代码:

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

static boost::thread_specific_ptr<string> _tssThreadNameSptr;

我收到以下错误

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

tssNaming.h:7: 错误:“字符串”未在此范围内声明

但我在#include 中包含字符串。

【问题讨论】:

标签: c++ boost-thread


【解决方案1】:

您必须使用 std::string,因为它位于 std 命名空间中。

【讨论】:

    【解决方案2】:

    string 位于 std 命名空间中。您有以下选择:

    • 在包含后写入using namespace std; 并启用所有std 名称:然后您可以在您的程序中仅写入string
    • 在包含后写入using std::string 以启用std::string:然后您可以在您的程序中仅写入string
    • 使用std::string 代替string

    【讨论】:

    • 您应该在有限范围内(例如,在函数内部)谨慎使用“using namespace std”或“using std::string”。永远不要在标题中使用它,因为它会污染全局名称空间,其中包含您的标题用户可能不想要的符号。
    【解决方案3】:

    我发现包括:

    using namespace std;
    

    您的 C++ 代码可以节省大量调试时间,尤其是在像您这样需要 std:: 字符串的情况下,它还有助于保持代码整洁。

    考虑到这一点,您的代码应该是:

    #include <string>
    using namespace std;
    #include <boost/thread/tss.hpp>
    
    static boost::thread_specific_ptr<string> _tssThreadNameSptr;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 2010-09-10
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多