5

我正在尝试在我的单吨类静态函数之一上实现互斥锁。但收到此错误:

$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.


}

任何帮助将不胜感激。谢谢,尤维

4

1 回答 1

12

这确实是“最尴尬的解析”问题的变体。m_Mutex除了作为 的成员之外, 您还没有在任何地方定义 a MutexImplementation,因此在 之外MutexImplementation,它的名称是 MutexImplementation::m_Mutex(并且由于它是私有的,因此您不能合法地访问它)。当你写:

LockBlock (&m_Mutex);

,编译器找不到m_Mutex,因此假设您正在定义一个局部变量。括号是合法的,但没有作用,声明同:

LockBlock& m_Mutex;

LockBlock和 的引用只有在它们被初始化时才能被定义。

如果你想要一个局部变量,你必须给它一个名字。如果你希望它初始化为m_Mutex,你必须m_Mutex公开,并指定类名:

LockBlock& localRefToMutex( &MutexImplementation::m_Mutex );

例如。

于 2012-04-05T09:53:21.773 回答