Допустим, у меня есть следующие определения:C++ указатель на функцию-член не указатель функции
class ScriptInterpreter {
public:
class cell;
typedef ScriptInterpreter::cell (ScriptInterpreter::*proc_t) (const std::vector<cell> &);
class cell {
public:
proc_t proc;
};
ScriptInterpreter::cell proc_add(const std::vector<cell> & c);
};
и следующий код происходит:
ScriptInterpreter::eval(ScriptInterpreter::cell cell, environment * env)
{
// ...
ScriptInterpreter::cell c;
c.proc = &ScriptInterpreter::proc_add;
return (c.*proc_)(exps);
}
На линии, где я пытаюсь вызвать указатель функции я получаю ошибку
error: called object type 'proc_t' (aka 'ScriptInterpreter::cell (ScriptInterpreter::*)(const std::vector<cell> &)') is not
a function or function pointer
Когда я добавить * в передней части FUNC поэтому строка выглядит следующим образом:
ScriptInterpreter::cell c = (proc_cell.*proc_)(exps);
производит это:
error: use of undeclared identifier 'proc_'
я уже смотрел на Callback functions in c++ и другие проблемы такого рода, но на самом деле ничего не дал мне намек, что это неправильно или представило никакой информации о моей ошибке. Я определенно не имею никаких имен дважды или что-то в этом роде. Также после прочтения what is an undeclared identifier error and how do i fix it Я уверен, что у меня все в порядке.
Так что я делаю неправильно?
Edit: обновленный код с реальным кодом вместо кода заполнителя
Во-первых, в вашем коде нет 'B'. Только «A :: B». Лучше публиковать реальный код для вашего 'main', чтобы люди поняли, о чем вы говорите. – AnT
Вам нужен объект 'A' (не' B'), чтобы вызвать его, поскольку он является указателем на функцию члена 'A'. – songyuanyao
B не относится к A – Raindrop7