代码之家  ›  专栏  ›  技术社区  ›  Mau

Boost 1.44.0+VS2010私有成员错误

  •  1
  • Mau  · 技术社区  · 14 年前

    我有一个Utils类声明。h:

        class Utils {
     private:
         static boost::mutex outputMutex;
        };
    

    在cpp文件中:

    boost::mutex Utils::outputMutex = boost::mutex();
    

    我得到:

    Error 1 error C2248: 'boost::mutex::mutex' : cannot access private member declared in class 'boost::mutex'
    

    boost/thread/win32/mutex.hpp 我们看到:

    namespace boost
    {   
        class mutex:
            public ::boost::detail::underlying_mutex
        {
    
        // ...       
    
        public:
            mutex()
            {
                initialize();
            }
    

    有人知道我错过了什么吗?它以前用VS2008在另一台机器上编译OK。

    谢谢您。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Ferruccio    14 年前

    .cpp文件应为:

    boost::mutex Utils::outputMutex;
    

        2
  •  3
  •   GManNickG    14 年前

    您所拥有的是复制初始化,相当于:

    boost::mutex Utils::outputMutex(boost::mutex());
    

    mutex 是不可操作的。让它默认构造:

    boost::mutex Utils::outputMutex;
    
        3
  •  0
  •   chrisaycock spacemanspiff    14 年前

    你好像在宣布 Utils::outputMutex 两次,一次在类声明中,然后在.cpp中。另外,第二个声明被分配给构造函数的“返回值”,这是不可能的。如果删除第二个声明会怎么样?