【问题标题】:How to pass the parameter of a function by object reference (C++)如何通过对象引用传递函数的参数(C++)
【发布时间】:2015-08-20 09:14:14
【问题描述】:

我想通过对象引用传递函数的参数。如果我这样写代码:

#include <boost\thread\thread.hpp>
class Data 
{
public:
    Data();
    ~Data();
    void func(boost::mutex  &mut);
private:

    boost::condition_variable   condData;
    boost::mutex                mutData;
};


void Data::func(boost::mutex  &mut)
{
    Data* data = this;
    data->mutData = mut;// Here a syntax error
}

这里data-&gt;mutData = mut;显示错误

Error: "boost::mutex &amp;boost::mutex:.Operator=(boost::mutex &amp;)" can not be accessed 等号。

如何解决这个问题?

【问题讨论】:

  • 不是直接相关,但您使用的是 C++11?如果是这样,请使用std::thread 等。但是像你这样的编译错误很可能是由于对象的误用;有关使用boost::mutex 的正确方法,请参阅 boost 文档(比以前更好)。还有一个公平的问题,再加上一个。

标签: c++ object boost reference


【解决方案1】:

根据设计,不能复制或分配互斥锁。

允许这样做会使使用互斥锁来保护某些资源的想法无效。如果每个人都有自己的互斥锁副本,那么共享资源就不再有一个锁。

【讨论】:

  • 它甚至不能移动,我们可能会添加。
【解决方案2】:

boost::mutex 继承自 boost::noncopyable,无法复制或分配。 (您发布的错误消息说赋值运算符是私有的。因此您不能使用它。)如果要共享boost::mutex 对象,则必须使用指针或全局变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多