我正在尝试在我的单吨类的静态功能之一上实现Mutex锁定。但得到这个错误:
$error:‘m_Mutex’ declared as reference but not initialized
$warning:warning: unused variable ‘m_Mutex’
这是我的代码段。
====== Commondefines.h ==========
/**
*@class LockBlock
*This class is used to provide Mutex Lock on thread.
*/
class LockBlock
{
public:
LockBlock(pthread_mutex_t *mutex)
{
lockMutex = mutex;
pthread_mutex_lock(lockMutex);
};
~LockBlock()
{
pthread_mutex_unlock(lockMutex);
lockMutex = NULL;
}
private:
pthread_mutex_t *lockMutex;
};
====== MutexImplenation.h ==
#include "CommonDefines.h"
class MutexImplementation
{
private:
static pthread_mutex_t m_Mutex ;
public:
static void commonFunction();
};
==== MutexImplementation.cpp ==========
// Initialize static member of class.
pthread_mutex_t MutexImplentation::m_Mutex = PTHREAD_MUTEX_INITIALIZER;
void commonFunction()
{
LockBlock(&m_Mutex); // Here I am getting this error.
}
任何帮助都将受到高度赞赏。 谢谢, Yuvi
答案 0 :(得分:12)
这实际上是“最令人尴尬的解析”问题的变体。
除了作为成员之外,你没有在任何地方定义m_Mutex
MutexImplementation
,所以在MutexImplementation
之外,它的名字是
MutexImplementation::m_Mutex
(因为它是私人的,你不能
合法访问它)。当你写:
LockBlock (&m_Mutex);
,编译器找不到m_Mutex
,所以假设你是。{
定义局部变量。括号是合法的,但没有
效果,声明与:
LockBlock& m_Mutex;
对LockBlock
的引用,只有在引用时才能定义引用
已初始化。
如果你想要一个局部变量,你必须给它一个名字。如果你
想要将其初始化为m_Mutex
,您必须将m_Mutex
公开,
并指定类名:
LockBlock& localRefToMutex( &MutexImplementation::m_Mutex );
例如。