代码之家  ›  专栏  ›  技术社区  ›  Dmitry Yudakov

在类中使用静态互斥

  •  28
  • Dmitry Yudakov  · 技术社区  · 16 年前

    我有一个类,我可以有很多实例。在内部,它从第三方库(使用一些全局变量)创建和初始化一些成员,并且不是线程安全的。

    
    
    class MyClass
    
    {
      static boost::mutex mx;
    
      // 3rd party library members
    public:
      MyClass();
      ~MyClass();
    };
    
    MyClass::MyClass()
    {
      boost::mutex::scoped_lock scoped_lock(mx);
      // create and init 3rd party library stuff
    }
    
    MyClass::~MyClass()
    {
      boost::mutex::scoped_lock scoped_lock(mx);
      // destroy 3rd party library stuff
    }
    
    
    

    我无法链接,因为我收到错误:

    undefined reference to `MyClass::mx`
    
    1. 使用静态互斥有什么问题吗?


    编辑:

    boost::mutex MyClass::mx;
    
    1 回复  |  直到 16 年前
        1
  •  58
  •   Mike Seymour    16 年前

    您已声明但未定义类静态互斥。再加一行就行了

    boost::mutex MyClass::mx;
    

    用MyClass实现cpp文件。