C++ 自定义模板锁护卫非法全局析构函数
我正在尝试为自定义R/W锁编写一个模板lockguard。我希望它模板,以便我可以使用不同的rw锁的警卫,但我不能让它工作。我得到的错误如下:C++ 自定义模板锁护卫非法全局析构函数,c++,templates,C++,Templates,我正在尝试为自定义R/W锁编写一个模板lockguard。我希望它模板,以便我可以使用不同的rw锁的警卫,但我不能让它工作。我得到的错误如下: Severity Code Description Project File Line Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int jimdbMSVS d:\...\src\thread
Severity Code Description Project File Line
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int jimdbMSVS d:\...\src\thread\rwlockguard.hpp 6
Error C2588 '::~RWLockGuard': illegal global destructor jimdbMSVS d:\...\src\thread\rwlockguard.hpp 20
Error C2433 'RWLockGuard': 'inline' not permitted on data declarations jimdbMSVS d:\...\src\thread\rwlockguard.hpp 6
Error C2447 '{': missing function header (old-style formal list?) jimdbMSVS d:\...\src\thread\rwlockguard.hpp 21
Error C2059 syntax error: '<' jimdbMSVS d:\git_repo\jim-db\src\thread\rwlockguard.hpp 6
Error C2143 syntax error: missing ';' before '<' jimdbMSVS d:\...\src\thread\rwlockguard.hpp 6
Error C2143 syntax error: missing ';' before '{' jimdbMSVS d:\...\src\thread\rwlockguard.hpp 21
Error C2988 unrecognizable template declaration/definition jimdbMSVS d:\...\src\thread\rwlockguard.hpp 6
目标是:
RWLockGuard<RWLock> lock(mylock,READ);
RWLockGuard锁(mylock,读取);
rblock.h的内容是什么?请发布一个。添加了标题。它是一个有两个锁/解锁方法的类,使用clangb编译,但是我不能编译它,总是会在上面得到错误,你在使用哪个编译器?
namespace jimdb{ namespace tasking {
template<typename T>
inline RWLockGuard<T>::RWLockGuard(T& lock, const LockType& l) : m_lock(lock), m_type(l)
{
switch(m_type)
{
case READ:
m_lock.readLock();
break;
case WRITE:
m_lock.writeLock();
break;
}
}
template<typename T>
inline RWLockGuard<T>::~RWLockGuard()
{
switch (m_type)
{
case READ:
m_lock.readUnlock();
break;
case WRITE:
m_lock.writeUnlock();
break;
}
}
}} // jimdb::tasking
namespace jimdb{ namespace tasking {
class RWLock {
public:
inline RWLock();
inline void readLock();
inline void readUnlock();
inline void writeLock();
inline void writeUnlock();
private:
int m_reader;
bool m_writing;
std::condition_variable m_cond;
std::mutex m_mutex;
};
}} // jimdb::tasking
RWLockGuard<RWLock> lock(mylock,READ);