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::vector
的erase
函数,这是非常量的。只需删除 const 限定符,它应该可以正常工作。
【讨论】:
以上是关于C ++没有匹配函数来调用向量中的擦除的主要内容,如果未能解决你的问题,请参考以下文章