Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 表达式映射/集合迭代器不可取消引用_C++_Iterator - Fatal编程技术网

C++ 表达式映射/集合迭代器不可取消引用

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

我试图从我创建的自定义类中创建一个迭代器,这样我就可以看到在结构PLC中的类向量中是否已经有一个“标记名”:

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,但是。。。是 啊