어떤 이유로 든 ErrorHandler.h에서 다음 오류가 계속 발생합니다. 크기 함수에 인수가 누락 된 이유는 무엇입니까?std 목록의 오류
'std :: list < _Ty> :: size': 함수 호출 누락 인수 목록; 마지막 요소를 반환하지 않는 회원
'std::_List_iterator<_Mylist> std::list<_Ty>::erase(std::_List_const_iterator<_Mylist>,std::_List_const_iterator<_Mylist>)' : cannot convert parameter 1 from 'int' to 'std::_List_const_iterator<_Mylist>'
'std::_List_iterator<_Mylist> std::list<_Ty>::erase(std::_List_const_iterator<_Mylist>)' : cannot convert parameter 1 from 'int' to 'std::_List_const_iterator<_Mylist>'
// in errorhandler.h
class ErrorHandler{
std::list<unsigned int> m_ErrorList;
public:
ErrorHandler(){ }
~ErrorHandler(){ }
void ForceShutdown(){ free(&m_ErrorList); }
void Add(int errCode){ m_ErrorList.push_back(errCode); }
unsigned int GetLastError(){ if(m_ErrorList.size!=0)return m_ErrorList.back(); }
void Remove(int pos){ if(m_ErrorList.size!=0)m_ErrorList.erase(pos); }
void RemoveRange(int start,int end){ if(m_ErrorList.size!=0)m_ErrorList.erase(start,end); }
};
// in criticalsection.h
class CriticalSection{
long m_nLockCount;
long m_nThreadId;
typedef CRITICAL_SECTION cs;
cs m_tCS;
public:
CriticalSection(){
::InitializeCriticalSection(&m_tCS);
m_nLockCount = 0;
m_nThreadId = 0;
}
~CriticalSection(){ ::DeleteCriticalSection(&m_tCS); }
void Enter(){ ::EnterCriticalSection(&m_tCS); }
void Leave(){ ::LeaveCriticalSection(&m_tCS); }
void Try();
};
class LockSection{
CriticalSection* m_pCS;
ErrorHandler * m_pErrorHandler;
public:
LockSection(CriticalSection* pCS,ErrorHandler* pErrorHandler){
m_pCS = pCS;
m_pErrorHandler = pErrorHandler;
if(!m_pCS)m_pErrorHandler->Add(0x1AE1); // 0x1AE is code prefix for critical section header
if(m_pCS)m_pCS->Enter();
}
~LockSection(){
if(!m_pCS)m_pErrorHandler->Add(0x1AE2);
if(m_pCS)m_pCS->Leave();
}
};
'pop_back()'은 마지막 요소를 반환하지 않습니다. 왜냐하면 비효율적 일 수있는 값으로 수행해야하기 때문입니다. C++ 11의 이동 구조는 이것을 표면 상으로 해결할지라도. –
@JonPurdy : 효율성 만이 아닙니다. 그것은 예외의 정확성에 관한 것입니다. 팝 된 객체를 반환하는 pop은 복사 ctor가 예외를 throw하면 객체를 잃게됩니다. –
@JerryCoffin : 고려해야 할 또 다른 좋은 점. 하지만, 왜 복사 생성자가 첫 번째 장소에 던져 넣을 지에 대해서는 조금 더 관련이 있습니다. –