C ++没有匹配函数来调用向量中的擦除

Posted

技术标签:

【中文标题】C ++没有匹配函数来调用向量中的擦除【英文标题】:C++ no matching function for call to erase in vector 【发布时间】:2019-03-10 17:03:50 【问题描述】:

我一直在研究并试图找出这个错误几个小时,但没有成功。给定要擦除的索引,我无法从向量中擦除。删除给定索引的函数在 tuple.cpp 中,如 tuple.h 中所述。

元组.h:

#pragma once
#include <iostream>
#include <vector>
#include <string>

using namespace std;

class Tuple 
    private:
        vector<string> tuVec;
    public:
        Tuple() ;
        string toString() const;
        void eraseFromVec(int index) const;
        bool operator< (const Tuple &right) const 
            string temp = toString();
            string temp2 = right.toString();
            return temp < temp2;
        
;

元组.cpp:

#include "tuple.h"

void Tuple::eraseFromVec(int index) const 
    tuVec.erase(tuVec.begin() + index);
    return;

每个 Tuple 对象都是集合的成员,集合是 Relation 类的成员。

Relation.h:

#pragma once

#include "tuple.h"
#include <iostream>
#include <set>
#include <string>
#include <sstream>
#include <iterator>

using namespace std;

class Relation 
    private:
        string name;
        set<Tuple> tuples;
    public:
        Relation(string rName, Scheme rScheme);
        void addTuple(Tuple newTuple);
;

这里是调用擦除函数的代码:

set<Tuple>::iterator it;
    for(it = tuples.begin(); it != tuples.end(); ++it) 
        int size = it->tuVec.size() - 1;
        int i;
        for(i = size; i > -1; --i) 
            bool isIn = false;
            int j;
            int size2 = tempRel.toKeep.size();
            for(j = 0; j < size2; ++j) 
                if(//condition) 
                    isIn = true;
                
            
            if(!isIn) 
                it->eraseFromVec(i);
            
        
    

这是我收到的错误消息:(我尝试在此处输入但由于某种原因它不起作用,所以我附上了它的图片)

My error message

我希望以前没有人问过这个问题。我已经在互联网上搜索了几个小时试图找到解决方案,但我一直无法。如有任何帮助,我将不胜感激。

【问题讨论】:

要么从 eraseFromVec(int) 中删除 const 限定符,要么将 tuVec 声明为可变的。否则,eraseFromVec 将通过 const 引用访问 tuVec,并且修改 const 向量不起作用。 @Chemistree 将 tuVec 声明为可变有效。非常感谢! 【参考方案1】:

看来你的问题是你的函数eraseFromVec 有一个const 限定符。但它调用了std::vectorerase 函数,这是非常量的。只需删除 const 限定符,它应该可以正常工作。

【讨论】:

以上是关于C ++没有匹配函数来调用向量中的擦除的主要内容,如果未能解决你的问题,请参考以下文章

迭代器 - c ++ 11中没有匹配的擦除函数

C++ - 没有匹配的成员函数调用“push_back”

错误:在 C++ 中没有用于调用构造函数的匹配函数

构造函数中的“没有匹配的函数调用”

创建函数变体向量时出现“调用没有匹配函数”错误

C++'没有匹配的调用函数'和'没有已知的参数转换'