C ++ нет соответствующей функции для вызова стереть в векторе - PullRequest
0 голосов
/ 10 марта 2019

Я искал и пытался выяснить эту ошибку часами, но безуспешно.Я не могу удалить из вектора, учитывая индекс для удаления.Функция для удаления заданного индекса находится в tuple.cpp, как описано в tuple.h.

tuple.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;
        }
};

tuple.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);
            }
        }
    }

Вот сообщение об ошибке, которое я получаю: (Я попытался набрать его здесь, но по какой-то причине это не сработало, поэтому я прилагаю его изображение)

Мое сообщение об ошибке

Я надеюсь, что этоне спрашивали раньше.Я часами искал в интернете, пытаясь найти решение, но не смог.Буду признателен за любую помощь.

1 Ответ

2 голосов
/ 10 марта 2019

Похоже, ваша проблема в том, что ваша функция eraseFromVec имеет квалификатор const. Но он вызывает erase функцию std::vector, которая не является константой. Просто удалите константный квалификатор, и он должен работать нормально.

...