У меня есть два класса, Sim
и IElement
.Класс IElement
определяет указатель на функцию, тогда как класс Sim
имеет вектор IElement
указателей.Как правильно вызывать указанную функцию из указателя функции, определенного в IElement
, если у меня есть вектор IElement*
?
Или, другими словами, у меня есть
std::vector<IElement*> nodes;
И мне нужно вызвать указанную функцию из IElement
:
nodes[i]->*SetInput(); // ERROR: Identifier "SetInput" is undefined
Я предполагаю, что у меня возникает эта ошибка, потому что nodes
- это вектор указателей, и яне зная, как разыменовать nodes[i]
перед вызовом функции, на которую он указывает.
Спасибо за любой совет.
Ниже приведены более подробные фрагменты кода.
Метод класса Sim
, где у меня ошибка Undefined identifier
для метода IElement
#include <vector>
#include "Elements.h" // defines class IElement in namespace Elements
void Sim::CreateNodes(int N) // this method belongs to the Sim class in namespace "Simulations"
{
nodes = std::vector<Elements::IElement*>(N);
int i = 0;
while (i < N)
{
nodes[i] = new Elements::IElement(true); // for the sake of the example
nodes[i]->*SetInput(); // ERROR: Identifier "SetInput" is undefined
i++;
}
}
, тогда как в пространстве имен Elements
у меня есть класс IElement
декларация
class IElement
{
public:
typedef void(IElement::*SetInputFc_ptr)();
IElement(bool); // normalizeInput
~IElement();
SetInputFc_ptr SetInput;
};
и класс IElement
реализация
IElement::IElement(bool normalizeInput)
{
if (normalizeInput)
{
this->SetInput= &(this->SetInput_Sum);
}
else
{
this->SetInput= &(this->SetInput_Const);
}
}