Попытка манипулировать указателем функции-члена внутри того же класса

#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 Я думаю, что это работает именно так. Я не знаю, почему я не попробовал это сначала. Возможно, я сделал, и я запутался с другой ошибкой компиляции.