std列表错误
Errors with std list
由于某些原因,我在ErrorHandler.h中不断收到以下错误为什么size函数缺少参数?
'std::list<_Ty>::size':函数调用缺少参数列表;使用'&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();
}
};
http://www.cplusplus.com/reference/stl/list/pop_back/
否,pop_back
不返回最后一个元素。这是为了防止意外错误。您必须通过back()
显式地获取最后一个元素。如果你想在不阅读的情况下弹出几个,这种方式也会更快。这也适用于所有其他标准C++库容器。
从你的警告来看,你似乎也很难删除。对于列表来说,这可能很棘手:
void Remove(int pos){
std::list<unsigned int>::const_iterator iter = m_ErrorList.begin();
//no need to check the size, advance will throw an exception if pos is invalid
std::advance(iter, pos);
m_ErrorList.erase(iter);
}
您糟糕地使用了列表方法:
if(m_ErrorList.size!=0)
size
是一个方法,因此需要调用它(带括号(:
if(m_ErrorList.size()!=0)
注意,size
对于list
是慢的;你可能想要实现这样的GetLastError:
unsigned int GetLastError(){ if(!m_ErrorList.empty())return m_ErrorList.back(); }
m_ErrorList.erase(pos);
擦除需要迭代器,而不是整数。因此,您最好使用
std::list::iterator it=m_ErrorList.begin();
std::advance(it, pos);
m_ErrorList.erase(it);
请注意,这也不是一个特别有效的方法。
BTW,检查您是否需要list
;vector
可能会更好地为您服务。
相关文章:
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 如何防止初始值设定项列表中的错误值?
- 从类型列表中递归删除重复项会导致编译器堆空间错误 (VS2017)
- 为什么我会收到此错误?无法将 {lb, ub} 从<大括号括起来的初始值设定项列表>转换为 float(**)(float*, int)
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 我将 Makefile 更改为 C++11 版本,但仍然收到列表初始值设定项错误
- 使用 C++11 时列表中出现编译错误
- 使用成员初始值设定项列表时没有匹配的函数调用错误
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 处理程序的模块列表中有一个错误的模块"WebSocketModule"
- 程序接收信号SIGSEGV,分段错误.C++列表
- 格式化输出以显示在错误列表的消息部分中
- 错误 - 列表节点未命名类型
- 错误:“列表”不是“std”的成员,错误:模板参数 2 无效
- 正在创建Visual Studio错误列表消息
- 打开 cpp 文件或视觉工作室 2013 最终剂量没有调试选项也没有错误列表
- 无法从QNetworkAccessManager访问Ssl错误列表
- 在QT中链接libCurl会给出一个庞大的C++错误列表
- Visual Studio 2012 c++构建失败,但错误列表或输出中没有任何内容