error: no matching function for call to 'boost::shared_lock<boost::shared_mutex>::shared_lock(const Lock&)'
error: no matching function for call to 'boost::shared_lock<boost::shared_mutex>::shared_lock(const Lock&)'
我已经实现了如下所示的 ReadLock:
在我的myClass.h
#include <boost/thread/locks.hpp>
#include <boost/thread/shared_mutex.hpp>
typedef boost::shared_mutex Lock;
typedef boost::shared_lock< Lock > ReadLock;
Lock myLock;
在myClass.cpp中:
void ReadFunction() const
{
ReadLock r_lock(myLock); // Error!
//Do reader stuff
}
该代码在 VS2010 中有效,但在 GCC4.0 中失败。编译器在 ReadLock 处抛出错误,指出没有匹配的函数。我怀疑是变量 myLock 的 "const" 正确性问题。当我删除函数声明中的 const 时,错误消失了。谁能给我解释一下?为什么这在 windows 下有效但在 gcc 下无效?
这里有什么建议吗?谢谢
您应该从 ReadFunction()
中删除 const
限定词,因为 qualifying a non-member function with cv
或 ref 限定词是非法的,甚至不感觉;或者你将你想要做的任何事情封装在 class
.
中
void ReadFunction() const
{
ReadLock r_lock(myLock); // Error!
//Do reader stuff
}
const
只能应用于成员函数。上面的代码不是成员函数,如果是的话,它应该是,(例如,一个名为 MyClass
的 class):
void MyClass::ReadFunction() const
{
ReadLock r_lock(myLock);
//Do reader stuff
}
在这种情况下,您通常需要让 lock
成为 mutable
成员。通过这样声明:
class MyClass{
....
mutable Lock myLock;
};
我已经实现了如下所示的 ReadLock:
在我的myClass.h
#include <boost/thread/locks.hpp>
#include <boost/thread/shared_mutex.hpp>
typedef boost::shared_mutex Lock;
typedef boost::shared_lock< Lock > ReadLock;
Lock myLock;
在myClass.cpp中:
void ReadFunction() const
{
ReadLock r_lock(myLock); // Error!
//Do reader stuff
}
该代码在 VS2010 中有效,但在 GCC4.0 中失败。编译器在 ReadLock 处抛出错误,指出没有匹配的函数。我怀疑是变量 myLock 的 "const" 正确性问题。当我删除函数声明中的 const 时,错误消失了。谁能给我解释一下?为什么这在 windows 下有效但在 gcc 下无效?
这里有什么建议吗?谢谢
您应该从 ReadFunction()
中删除 const
限定词,因为 qualifying a non-member function with cv
或 ref 限定词是非法的,甚至不感觉;或者你将你想要做的任何事情封装在 class
.
void ReadFunction() const
{
ReadLock r_lock(myLock); // Error!
//Do reader stuff
}
const
只能应用于成员函数。上面的代码不是成员函数,如果是的话,它应该是,(例如,一个名为 MyClass
的 class):
void MyClass::ReadFunction() const
{
ReadLock r_lock(myLock);
//Do reader stuff
}
在这种情况下,您通常需要让 lock
成为 mutable
成员。通过这样声明:
class MyClass{
....
mutable Lock myLock;
};