微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取'm_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 ======

C ++:std :: async和std :: mutex在Linux上导致死锁,但在Windows上运行?

如何使线程同步,而不使用互斥,semorphore,spinLock和futex?

只有一个线程可能会导致死锁或冻结在Linux上的程序?

需要帮助来debugging互斥锁死锁

pthread互斥量的开销?

#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. }

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

函数上进行互斥

与进程使用互斥/信号量

互斥与Windows中的事件

如果一个线程正在等待一个互斥量,信号是否被捕获?

如何强制我的应用程序只能打开一个exe文件? qt,linux

这实际上是“最令人尴尬的解析”问题的一个变种。 除了作为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 );

例如。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐