编译器:MSVS 2008
提升:1.49
码:
#include <boost/signals2.hpp>
#include <boost/thread.hpp>
class SigOwner
{
public:
typedef boost::signals2::signal<void (int)> OSig;
OSig _signal;
void doConnect(OSig::slot_type slot) { _signal.connect(slot); }
};
class SigUser
{
public:
#if defined(FAIL2)
boost::mutex sync;
#endif
#if defined(FAIL1)
boost::condition_variable evSig;
#endif
void setup(SigOwner &so)
{
so.doConnect(*this); // failure 1 traces back to this line
}
void operator()(int value) // signature to make SigUser a slot
{
}
}; // failure 2 flags on this line
如上所示,这编译好了 .
如果我定义 FAIL1 (有或没有FAIL2), signals2/slot_template.hpp
内发生编译器错误:错误C2679:二进制'=':找不到带有'const SigUser'类型右手操作数的运算符(或者没有可接受的转换)
我不知道为什么 *this
被认为是const .
如果我定义 FAIL2 (没有定义FAIL1),则在指定的行发生编译器错误:错误C2248:'boost::mutex::mutex':无法访问类'boost::mutex'中声明的私有成员
我不知道私人会员正在尝试访问什么 .
任何人都可以给我一个线索吗?最好是一条线索,允许我定义FAIL1和FAIL2并获得成功的编译 .
1 回答
mutex
和condition_variable
都不可复制,因此您的SigUser
不可复制,因此您不能以这种方式将其传递给doConnect
. 解决此问题的一种方法是将sync
和evSig
定义为(智能)指针 .