#c #member-function-pointers
#c #указатель на член
Вопрос:
Я пытаюсь использовать указатель на функцию-член для динамического доступа через связанный список. (Я изучаю C уже несколько месяцев)
A создал класс. Конструктор класса создает связанный список. Каждый узел содержит некоторые данные, указатель на следующий узел и указатель a на функцию (я пытаюсь использовать этот последний… пока не работает)
Я могу использовать указатель на функцию-член в конструкторе, но я не понимаю, как передать это значение указателя другим структурам или функциям. Может быть, я пропустил что-то простое…
Заранее спасибо за вашу помощь.
-
Попытка использовать правильный синтаксис для указателя на функцию-член
-
Попытка использовать другой синтаксис для передачи значения в качестве аргумента функции
class linkedFct{
private:
struct node *firstNode;
struct node *lastNode;
struct node *newNode;
struct node *currentNode;
public:
linkedFct(){
firstNode = (NULL);
lastNode = (NULL);
void (linkedFct::*ptrFct)();
ptrFct = amp;linkedFct::theFunctionA;
//Call the function by pointer... this works!!! Great!
(this->*ptrFct)();
//Add a first node to the list
addNode("Try a first task");
//addNode("Try a first task", amp;(this->*ptrFct()));
//Trying to include the member function pointer into the list data
//this is not working!!! Don't understand how to pass that pointer
//to a member function
}
void addNode(string aName){
//void addNode(string aName, void (linkedFct::*ptrF)()){
//I am trying to implement something like this
//Trying to pass a member function pointer thru this attribute
newNode = new node;
newNode->name = aName;
//newNode->ptrFunction = ptrF; //Trying to implement something like this***
lastNode = newNode;
if (!firstNode){
firstNode = newNode;
}
else{
currentNode->nextNode = newNode;
}
currentNode = newNode;
};
Попытка использовать указатель внутри списка … ммм … не работает таким образом
void processTheList(){ //Browse the list
struct node *thisCurrentNode;
void (linkedFct::*ptrRunFct)();
thisCurrentNode = firstNode; //Start from top
int i = 0;
while (thisCurrentNode){
i ;
cout << "Node #" << i << ": Name: " << thisCurrentNode->name << endl; //Print the string
ptrRunFct = thisCurrentNode->ptrFunction;
ptrRunFct();
cout << endl;
thisCurrentNode = thisCurrentNode->nextNode;
}
}
Структура узла определяется таким образом:
struct node{ //A node struct to implement a linked list
string name; //Some data
void (linkedFct::*ptrFunction)(); //A pointer to member function... ****[That's what I am trying!!!]****
struct node *nextNode; //Pointer to next node
};
Комментарии:
1.
addNode("Try a first task", ptrFct);
2. Я не вижу ничего плохого в
void addNode(string aName, void (linkedFct::*ptrF)())
. Когда вы говорите, что это не работает, с какой проблемой вы столкнулись?3. @melpomene Я думаю, что это работает именно так. Я не знаю, почему я не попробовал это сначала. Возможно, я сделал, и я запутался с другой ошибкой компиляции.