Есть две проблемы с вашим кодом (кроме отсутствующих #include
s и std::
-prefixes)
Сначала вы пытаетесь использовать член класса Command::check
, но есть (возможно) несколько Command
-объектов, каждый со своим check
-членом.Вы должны указать, к какому Command
объекту вы хотите получить доступ.
Поскольку вы просматриваете вектор Command
-объектов с помощью i
-тератора, я предполагаю, что вы хотите получить доступ к check-member
из того, на что i
ссылается.Например: i->check
Второе: check
указывает на метод check_true
, который является членом класса If
.Это означает, что при вызове check_true
вы также должны указать, на какой объект If
должен действовать метод (элемент check
не содержит эту информацию)
Обычно это означает, что при вызове check_true
непосредственно высделать это следующим образом:
a.check_true(..) // `a` is of type `class If`
или b-> check_true (..) // b
имеет тип class If *
при косвенном выполнении через указатель на функцию (вваш случай i->check
) вы делаете это так:
a.*(i->check)(...) // `a` is of type `class If`
или
b->*(i->check)(...) // `b` is of type `class If *`
Но вы называете это так:
(i)->*....
и i
- это не указатель на объект If
, а ссылка на объект Command
.
Поскольку вы делаете все это внутри If::modify()
, я также предполагаю, что (i->check)(..)
должен действовать на тот же If
-объект, на который действует modify()
в настоящее время.Поэтому исправленный вызов функции должен быть:
this->*(i->check)(i->pattern, result)