Попытка манипулировать указателем на функцию-член внутри того же класса - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь использовать указатель на функцию-член для динамического доступа через связанный список.(Я изучаю C ++ уже несколько месяцев)

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 = &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", &(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
};
...