我有一个奇怪的错误。
class INST
{
public:
boost::mutex m_mutex;
};
std::vector<INST> m_inst;
错误C2248:'boost :: mutex :: mutex':无法访问类'boost :: mutex'中声明的私有成员 看到'boost :: mutex :: mutex'的声明
但是,我的其他课很好,
class VIEW
{
public:
boost::mutex m_mutex;
};
VIEW m_view;
我在这里遗漏了什么吗?我试图将m_mutex声明为private,但仍然存在同样的问题。
感谢。
答案 0 :(得分:18)
互斥锁不能是copied,因此您无法将它们放在可复制互斥锁的容器中。该错误可能是指互斥锁的私有拷贝构造函数。
答案 1 :(得分:2)
我意识到这个问题真的很老了,但我今天早些时候偶然发现了同样的问题,谷歌把我带到了这里。但是,提出的解决方案并不适合我,所以我想描述一下我是如何在自己的项目中解决它的。
我有一个类似于你的类向量,我以这样的方式管理它们,这样一旦访问向量的成员开始,向量将永远不会再次调整大小。我确实希望能够在开始之前在开始时调整矢量大小几次。我还想让线程以随机访问方式对向量中的任何项进行操作。
我通过在类的构造函数中动态分配它并在析构函数中销毁它来解决mutex的问题。当然,如果这样做,您必须保证在删除互斥锁时没有人在等待互斥锁。这个解决方案对我有用,因为我永远不会从向量中复制对象,我只能在容器内部访问它们。