Я пытаюсь вызвать функцию для полиморфного элемента. Но я получаю следующее сообщение об ошибке во время компиляции:
'this
' аргумент функции-члена 'select
' имеет тип 'const SelectParam
', но функция не помечена const
ошибка отображается при выборе p-> (* it)
std::set<Tuple>::iterator it;
for (it = tuples.begin(); it != tuples.end();) {
for (const SelectParam* p: selectionParams) {
bool successful = p->select(*it);
if( !successful ) {
it = tuples.erase(it);
} else {
it++;
}
}
}
и вот как определяются эти классы. (Я использую, чтобы не иметь всех const и & есть, но я помещал их везде, где только мог, в надежде, что я сделаю все, что захочу, const, но, очевидно, я не подхожу к проблеме правильно, поскольку она ничего не меняет.
В одном из дочерних классов, который хранится в родительском указателе.
bool const select(Tuple const & tup) {
bool matched = false;
if (tup[idx] == val) {
matched = true;
}
return matched;
}
В другом дочернем классе, который используется с полиморфизмом
bool const select(Tuple const & tup) {
bool matched = false;
if (tup[idx1] == tup[idx2]) {
matched = true;
}
return matched;
}
И, наконец, вот родительский класс, который очень прост.
class SelectParam {
public:
virtual const bool select( Tuple const & t) = 0;
};
``
Thanks in advance for being willing to help my feeble brain.