У меня есть основной класс и 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:
- Я создал и экземпляр class1st на main. cpp as instOf1stClassOnMain (printerOnMain) , который отправил вызывающую функцию (printerOnMain ()) в class1st.
- Теперь class1st знает, какая функция будет вызываться, когда showOn1stClass () звонил.
- Я звонил showOn1stClass () из main. cpp
- Bin go, он работал и class1st показывает мне функция printerOnMain .
Пока все хорошо.
Но когда я попытался сделать то же самое на другом классе, а не на главном, это не сработало .
Вот то, что я пытался (или сказать, что я хотел ...)
- Я создал и экземпляр class1st на class2nd.h как class1st instOf1stClassOn2ndClass (showOn2ndClass); , который отправил вызывающую функцию (showOn2ndClass ()) для class1st.
- Теперь class1st знает, какая функция будет вызываться, когда showOn1stClass () вызывается из class2nd.
- Я создал экземпляры class2nd в главном классе.
- Что это означает, что любые экземпляры class2nd будут использовать функцию showOn2ndClass , когда это необходимо. Но они независимы друг от друга.
- Я пытался вызвать функцию checkOn2ndClass для основного класса с экземплярами class2nd
Boommm. Это не сработало, и сказал мне, что " 'showOn1stClass' не является типом "
Надеюсь объяснить ясно ....