Invalid use of mom-static member function

Guten morgen,
ich verusche das problem seit gestern zu lösen aber bis hier fählt mir nichts N:
hierbei mein code und die dazu gehörige datei und der Fehler ganz unten. das ist mein erste post also ich hoffe das ich alles korrekt gemacht habe.

vielen dank für eure hilfe.

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

#ifndef RAD_H
#define RAD_H


#define encoder_pin_Motor_0 3
#define encoder_pin_Motor_1 2
#define encoder_pin_Motor_2 19
#define encoder_pin_Motor_3 18

#define pinMotor_0_0 4
#define pinMotor_0_1 5
#define pwmMotor_0_1 11

#define pinMotor_1_0 6
#define pinMotor_1_1 7
#define pwmMotor_1_0 10

#define pinMotor_2_0 52
#define pinMotor_2_1 12
#define pwmMotor_2_0 8

#define pinMotor_3_0 13
#define pinMotor_3_1 50
#define pwmMotor_3_0 9



class Rad
{
 public:
  
   Rad(int pinMotor_1, int pinMotor_2, int m_pinPwmMotor_1,  String radBezeichnung);
   void geschwindigkeitHoch(double pwm);
   double encoder();
   void fahren(bool mtr_0, bool mtr_1);
   void updateEncoder() ;
   virtual ~Rad();

 protected:
   int m_pinMotor_1_0;
   int m_pinMotor_1_1;
   int m_pinPwmMotor_1;
   String m_richtung;
   String m_radBezeichnung;


   int m_encoderPin;
   double m_encoderValue;
   int m_interval;
   long m_previousMillis ;
   long m_currentMillis;
   double m_pwmSinale;
   bool m_measureRpm ;
   double  m_encoderoutput;
   int m_rpm;
};
#endif


#include "Rad.h"



Rad::Rad(int pinMotor_1, int pinMotor_2, int m_pinPwmMotor_1, String radBezeichnung)
{
 m_pinMotor_1_0 = pinMotor_1_0;
 m_pinMotor_1_1 = pinMotor_1_1;
 m_pinPwmMotor_1 = m_pinPwmMotor_1;
 m_radBezeichnung = radBezeichnung;
 m_pwmSinale = m_pinPwmMotor_1;


 m_encoderValue = 0;
 m_interval = 1000;
 m_previousMillis = 0;
 m_currentMillis = 0;
 m_measureRpm = true;
 m_encoderoutput;
 m_rpm = 0;

}

void Rad::geschwindigkeitHoch(double pwm)
{
 if (pwm < 125) {
   m_pwmSinale += pwm;
   analogWrite(m_pinPwmMotor_1, m_pwmSinale);
 }
 m_pwmSinale -= pwm;
 analogWrite(m_pinPwmMotor_1, m_pwmSinale);
}
void Rad::fahren(bool mtr_0, bool mtr_1 )
{
 digitalWrite(m_pinMotor_1_0, mtr_0); //digital output
 digitalWrite(m_pinMotor_1_1, mtr_1);
}


double Rad::encoder()
{
 m_encoderoutput = 1240;
 // Update RPM value on every second
 m_currentMillis = millis();
 if (m_currentMillis - m_previousMillis > m_interval)
 {
   m_previousMillis = m_currentMillis;
   geschwindigkeitHoch(1);
   m_rpm = (float)(m_encoderValue * 60 / m_encoderoutput);

   // Only update display when there have readings
   if (m_pwmSinale > 0 || m_rpm > 0) {
     Serial.print(m_encoderValue);
     Serial.print(" pulse / ");
     Serial.print(m_encoderoutput);
     Serial.print(" pulse per rotation x 60 seconds = ");
     Serial.print(m_rpm);
     Serial.println(" RPM");
   }

   m_encoderValue = 0;
 }
 return m_pwmSinale;
}

void Rad::updateEncoder()
{
 m_encoderValue++;
}

Rad::~Rad()
{

}


/*
   Seging Tazeo cyrille
   projekt Mecanumautonumfahrzeug
   16.08.2019
*/



#include "Rad.h"

Rad rechteRad(pinMotor_0_0, pinMotor_1_0, pwmMotor_0_1, "rechte rad");

void setup() {
 Serial.begin(9600);
 pinMode(pinMotor_0_0, OUTPUT);
 pinMode(pinMotor_1_0, OUTPUT);
 pinMode(pwmMotor_0_1, OUTPUT);
 pinMode(encoder_pin_Motor_0, INPUT_PULLUP);
 attachInterrupt(digitalPinToInterrupt(encoder_pin_Motor_0), rechteRad.updateEncoder, CHANGE);

}

void loop() {
 rechteRad.encoder();
 rechteRad.fahren(true, false);

}

fehler:
BewegungFahrzeug:12:94: error: invalid use of non-static member function

attachInterrupt(digitalPinToInterrupt(encoder_pin_Motor_0), rechteRad.updateEncoder, CHANGE);

 attachInterrupt(digitalPinToInterrupt(encoder_pin_Motor_0), rechteRad.updateEncoder, CHANGE);

The ISR cannot be a member function of a class unless it is a static member.

Djamalx: das ist mein erste post also ich hoffe das ich alles korrekt gemacht habe.

Falsche Sprache oder falsches Subforum, keine Code-Tags und Tippfehler im Titel.

Wenn du jetzt fragst was Code-Tags sind, zeigst du, dass du "Read this before posting a programming question ..." nicht gelesen hast.

Für attachinterrupt kannst du keine normale Memberfunktion verwenden, wie die Fehlermeldung ja schon andeutet.

vielen Dank @Brattain Memberit is alright

Funktionen und Methoden sind zwei verschiedene Dinge. Methoden sind an ein Objekt eines bestimmten Typs gekoppelt und haben versteckt den this Zeiger auf ihr eigenes Objekt als Parameter. Deshalb kann man allgemeinen Funktionszeigern keine Zeiger auf Methoden übergeben

Daher kommt auch der Hinweis auf statische Methoden. Statische Methoden sind für alle Objekte gleich und haben daher keinen this Zeiger. Sie können aber nicht auf nicht-statische Daten zugreifen

Es gibt einen Weg das mit einer anonymen Lambda-Funktion zu umgehen, aber dann ist die ISR an dieses Objekt gekoppelt. Praktisch geht das daher nur mit Singletons