Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 增强互斥和类成员访问_C++_Multithreading_Boost_Mutex_Private Members - Fatal编程技术网

C++ 增强互斥和类成员访问

C++ 增强互斥和类成员访问,c++,multithreading,boost,mutex,private-members,C++,Multithreading,Boost,Mutex,Private Members,我在尝试使用时遇到了一个问题。因为我是一个新手,所以我现在遇到了一个问题,来自项目的大型类需要进行一些线程模式处理 在编译代码时,我不断收到错误: error C2248: 'boost::mutex::mutex' : cannot access private member declared in class 'boost::mutex' 通过在线阅读,我发现使用Boost的lock_-guard,可以得到如下声明 PointPorcessor processor = PointProce

我在尝试使用时遇到了一个问题。因为我是一个新手,所以我现在遇到了一个问题,来自项目的大型类需要进行一些线程模式处理

在编译代码时,我不断收到错误:

error C2248: 'boost::mutex::mutex' : cannot access private member declared in class 'boost::mutex'
通过在线阅读,我发现使用Boost的lock_-guard,可以得到如下声明

PointPorcessor processor = PointProcessor(x,y,z);
正在创建类的实例,并将其分配给
处理器
变量。(还是我错了?)。这基本上意味着boost现在将允许复制互斥

班级本身

PointProcessor
{
boost::mutex mtex; // The one and only mutex
// Other members
};
我可以用指针代替,比如 点处理器*处理器=新的点处理器(x,y,z)
问题是,这是一个很大的代码库,我不想将其余的实现更改为
PointProcessor*processor=new PointProcessor
,因为它们只是
PointProcessor=PointProcessor(x,y,z)

,问题在于:

PointPorcessor processor = PointProcessor(x, y, z);
您正在通过复制初始化创建
处理器
,其中首先默认构造类型为
PointProcessor
的临时处理器,然后从该临时处理器复制构造或移动构造
处理器

但是,
boost::mutex
是不可复制和不可移动的(只要您使用的boost版本中支持移动语义),这就解释了为什么
处理器的复制初始化是非法的

您应该通过直接初始化来构造对象,方法如下:

PointProcessor processor(x, y, z);

@ Wajih:编辑回答:“当然,慢慢来,让我知道:”伙计就是那个人:“我想我必须开始学习C++了!”谢谢你!