c ++ передача функции из класса в другой класс - PullRequest
0 голосов
/ 04 мая 2020

У меня есть основной класс и 2 разных класса с файлами .h и. cpp (class1st и class2nd).

main. cpp

#include <Arduino.h>
#include "class1st.h"
#include "class2nd.h"

void printerOnMain();
class1st instOf1stClassOnMain(printerOnMain);
class2nd instOf2ndClassOnMainNo1(1);
class2nd instOf2ndClassOnMainNo2(2);
class2nd instOf2ndClassOnMainNo3(3);

void printerOnMain()
{
    Serial.println("Its OK.");
}

void setup() {
    Serial.begin(57600);
    instOf1stClassOnMain.showOn1stClass();
    instOf2ndClassOnMainNo1.checkOn2ndClass();
    instOf2ndClassOnMainNo2.checkOn2ndClass();
    instOf2ndClassOnMainNo3.checkOn2ndClass();
}

void loop() {

}

class1st.h

#ifndef __CLASS1ST_H__
#define __CLASS1ST_H__

class class1st
{
private:
public:
    class1st(void (*invokerFunc)());
    void (*invokerFunc)();
    void showOn1stClass();

}; //class1st

#endif //__CLASS1ST_H__

class1st. cpp

#include "class1st.h"

class1st::class1st(void (*invokerFunc)())
{
    this->invokerFunc = invokerFunc;
}

void class1st::showOn1stClass()
{
    invokerFunc();
}

class2nd.h

#ifndef __CLASS2ND_H__
#define __CLASS2ND_H__

#include <Arduino.h>
#include "class1st.h"

class class2nd
{
private:
    int __instNo;

public:
    class2nd(int instNo);
    void showOn2ndClass();
    void checkOn2ndClass();
    class1st instOf1stClassOn2ndClass(showOn2ndClass);

}; //class2nd

#endif //__CLASS2ND_H__

class2nd. cpp

#include "class2nd.h"

class2nd::class2nd(int instNo)
{
    __instNo = instNo;
}

void class2nd::showOn2ndClass()
{
    Serial.print("class2nd instance no: ");Serial.println(__instNo);
}

void class2nd::checkOn2ndClass()
{
    instOf1stClassOn2ndClass.showOn1stClass();
}

Я отправляю функцию invoker в class1st при создании ее экземпляров. Функция invoker может быть из любого класса и любого экземпляра любого класса.

Здесь работает princible:

  1. Я создал и экземпляр class1st на main. cpp as instOf1stClassOnMain (printerOnMain) , который отправил вызывающую функцию (printerOnMain ()) в class1st.
  2. Теперь class1st знает, какая функция будет вызываться, когда showOn1stClass () звонил.
  3. Я звонил showOn1stClass () из main. cpp
  4. Bin go, он работал и class1st показывает мне функция printerOnMain .

Пока все хорошо.

Но когда я попытался сделать то же самое на другом классе, а не на главном, это не сработало .

Вот то, что я пытался (или сказать, что я хотел ...)

  1. Я создал и экземпляр class1st на class2nd.h как class1st instOf1stClassOn2ndClass (showOn2ndClass); , который отправил вызывающую функцию (showOn2ndClass ()) для class1st.
  2. Теперь class1st знает, какая функция будет вызываться, когда showOn1stClass () вызывается из class2nd.
  3. Я создал экземпляры class2nd в главном классе.
  4. Что это означает, что любые экземпляры class2nd будут использовать функцию showOn2ndClass , когда это необходимо. Но они независимы друг от друга.
  5. Я пытался вызвать функцию checkOn2ndClass для основного класса с экземплярами class2nd
  6. Boommm. Это не сработало, и сказал мне, что " 'showOn1stClass' не является типом "

    Надеюсь объяснить ясно ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...