C++ 表达式映射/集合迭代器不可取消引用
我试图从我创建的自定义类中创建一个迭代器,这样我就可以看到在结构PLC中的类向量中是否已经有一个“标记名”:C++ 表达式映射/集合迭代器不可取消引用,c++,iterator,C++,Iterator,我试图从我创建的自定义类中创建一个迭代器,这样我就可以看到在结构PLC中的类向量中是否已经有一个“标记名”: vector<plcClass>::iterator plcIndex = find_plcClass(_plcList->begin(), _plcList->end(), "tagName"); // TEMPLATE FUNCTION find template<class InputIterator, class T
vector<plcClass>::iterator plcIndex = find_plcClass(_plcList->begin(), _plcList->end(), "tagName");
// TEMPLATE FUNCTION find
template<class InputIterator, class T>
InputIterator find_plcClass (InputIterator first, InputIterator last, const T& val)
{
while (first!=last) {
if ( (*first).PLC.tagName == val) return first;
++first;
}
return last;
}
vector::迭代器plcIndex=find_plcClass(_plcList->begin(),_plcList->end(),“标记名”);
//模板函数查找
模板
输入迭代器find_plcClass(先输入迭代器,后输入迭代器,常数T&val)
{
while(第一个!=最后一个){
如果((*first).PLC.tagName==val)首先返回;
++第一,;
}
最后返回;
}
如果类别为:
#ifndef PLC_H
#define PLC_H
#include "Pyramid.h"
class plcClass
{
public:
// structures
struct parent_t{
string tagName;
string rack;
string slot;
vector<string> address;
vector<string> term;
vector<string> termDesc;
vector<string> descA;
vector<string> descB;
vector<string> descC;
}PLC;
// constructors
plcClass();
//parent found first
plcClass( string , string , string , string, string , string , string );
// de-constructor
~plcClass();
};
#endif
\ifndef PLC\u H
#定义可编程逻辑控制器
#包括“Pyramid.h”
类PLC类
{
公众:
//结构
结构父项{
字符串标记名;
线架;
弦槽;
矢量地址;
向量项;
向量termDesc;
矢量descA;
矢量descB;
向量描述;
}PLC;
//建设者
plcClass();
//首先找到的父对象
PLC类(字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串);
//反构造器
~plcClass();
};
#恩迪夫
我让它为另一个类工作,但它似乎在进入find_plcClass时崩溃了我没有看到任何明显的错误(至少没有什么导致崩溃)。。。您确定这部分代码中存在问题吗?其他地方是否存在内存损坏?是的,我很确定问题只存在于此抱歉,我仍然没有发现任何导致崩溃的原因。唯一让我感到非常奇怪的是使用第二个模板参数
T
作为搜索值,因为PLC.tagName
静态定义为string
,所以模板不能用T
任何东西来实例化,而只能用string
。当然不是你要找的问题。@DVNRS在这种情况下,模板应该用T
实例化为char*
或char[8]
而不是string
,但我也没有看到任何错误。@MarkRansom这是真的,没有想到这一点。当然,如果这是函数参数的静态类型,那么它们无论如何都会自动转换为string
s,但是。。。是 啊