C++ 自定义模板锁护卫非法全局析构函数

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

我正在尝试为自定义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\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);