Шаблонный класс с CRITICAL_SECTION компилируется, но при использовании он получил ошибку

У меня есть эти классы в моей библиотеке.

class SingleLock
{
public:
SingleLock(CRITICAL_SECTION *pCS);
~SingleLock();

private:
LPCRITICAL_SECTION m_cs;
};

SingleLock::SingleLock(CRITICAL_SECTION *pCS)
{
m_cs = pCS;
EnterCriticalSection(m_cs);
}
SingleLock::~SingleLock()
{
LeaveCriticalSection(m_cs);
}

template <typename T>
class Callback
{
public:
Callback() : m_current(), m_total(), m_cs()
{
InitializeCriticalSection(&m_cs);
}

~Callback()
{
DeleteCriticalSection(&m_cs);
}

void SetCurrent(T current)
{
SingleLock(&m_cs);
m_current = current;
}

void SetTotal(T total)
{
SingleLock(&m_cs);
m_total = total;
}

T GetCurrent()
{
SingleLock(&m_cs);
return m_current;
}

T GetTotal()
{
SingleLock(&m_cs);
return m_total;
}

private:
T m_total;
T m_current;
CRITICAL_SECTION m_cs;
};

Callback класс компилируется, но при попытке использовать какой-то метод в коде мой код не компилируется. Я изменил это в это:

template <typename T>
class Callback
{
public:
Callback() : m_current(0), m_total(0), m_cs()
{
InitializeCriticalSection(&m_cs);
}

~Callback()
{
DeleteCriticalSection(&m_cs);
}

void SetCurrent(T current)
{
EnterCriticalSection(&m_cs);
m_current = current;
LeaveCriticalSection(&m_cs);
}

void SetTotal(T total)
{
EnterCriticalSection(&m_cs);
m_total = total;
LeaveCriticalSection(&m_cs);
}

T GetCurrent()
{
EnterCriticalSection(&m_cs);
T result = m_current;
LeaveCriticalSection(&m_cs);
return result;
}

T GetTotal()
{
EnterCriticalSection(&m_cs);
T result = m_total;
LeaveCriticalSection(&m_cs);
return result;
}

private:
T m_total;
T m_current;
CRITICAL_SECTION m_cs;
};

И теперь все работает файл, кто-нибудь может объяснить, почему это происходит?

1

Решение

Не рад этому, но после публикации вопроса сразу же обнаружил ошибку, мне нужно SingleLock sl(&m_cs); вместо SingleLock(&m_cs);

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector