The two classes work perfectly independently, but not together

I emptied the main ino. It is almost a empty setup with empty loop, so I definitely think the problem comes from the classes (they are not used anymore in the main, and the result is still the same). Here is the SRTmouse.h :

#ifndef SRTmouse
#define SRTmouse
#include <Mouse.h>
class SRTMouse_
{
private:
  int XMousePin; 
  int YMousePin; 
  int SwitchMousePin;
  int analogcenter;
  int threshold ;
  bool onlyShowValue;      //use this to calibrate the joystick. Disables the mouse behaviour.
  bool invertX;           //invert X axis. Default is false.
  bool invertY;           //invert Y axis. Default is false.
  bool invertXY;          //invert X and Y axis. Default is false
  int thresholdUser;           
  int MouseSensitivity;
  bool keyPressed = false;
  unsigned long keyPressedTime =0;
  unsigned keyPressedDelay=100;
  unsigned delayNextPress = 300;
  bool MouseMode = true;
  unsigned long lastMove =0;
  
  void Arrow(unsigned long currentMillis);

protected:
bool mouseMode = true;

public:
  SRTMouse_(
  int XMousePinUser, 
  int YMousePinUser, 
  int SwitchMousePinUser,
  bool onlyShowValueUser,      //use this to calibrate the joystick. Disables the mouse behaviour.
  bool invertXUser,           //invert X axis. Default is false.
  bool invertYUser,           //invert Y axis. Default is false.
  bool invertXYUser,          //invert X and Y axis. Default is false
  int thresholdUser,           
  int MouseSensitivityUser);
  void set();
  void begin();
  bool getMouseMode();
  bool lastClickState = false;
  unsigned int startedToClick = 0;
  int configMouseDelay = 300;
  unsigned clickPressed = 15;
  unsigned long lastClick = 0;
  bool setAction(long currentmillis);
  void setMouse(bool sendData, unsigned long currentmillis);
    int xReading, yReading;
  int readAxis(int thisAxis
  );


};

#endif

And the SRTmouse.cpp :

#include "SRTmouse.h"
//#include <WProgram.h>
#include <Mouse.h>
#define TopSpeed  5
#include <Keyboard.h>
//v1.1

bool SRTMouse_::getMouseMode(){
  return mouseMode;
}

SRTMouse_::SRTMouse_(
  int XMousePinUser, 
  int YMousePinUser, 
  int SwitchMousePinUser,
  bool onlyShowValue,      //use this to calibrate the joystick. Disables the mouse behaviour.
  bool invertX,           //invert X axis. Default is false.
  bool invertY,           //invert Y axis. Default is false.
  bool invertXY,
  int thresholdUser,           
  int MouseSensitivityUser
  ){
  XMousePin=XMousePinUser;
  YMousePin=YMousePinUser;
  SwitchMousePin=SwitchMousePinUser;
  threshold = thresholdUser;
  MouseSensitivity =MouseSensitivityUser;
  startedToClick = 0;
  configMouseDelay = 400;
  }

void SRTMouse_::begin(){
  pinMode(XMousePin, INPUT);
  pinMode(YMousePin, INPUT);
  pinMode(SwitchMousePin, INPUT_PULLUP);
  Mouse.begin();
  Keyboard.begin();
}

bool SRTMouse_::setAction(long time){
  return true;
}

int SRTMouse_::readAxis(int thisAxis) {


  int reading = analogRead(thisAxis);

  if (abs(reading - SRTMouse_::analogcenter) < SRTMouse_::threshold) {
    reading = analogcenter;
  }

  reading = map(reading, 0, 1023, 0, SRTMouse_::MouseSensitivity);

  int distance = reading - SRTMouse_::MouseSensitivity / 2;
  if (distance == SRTMouse_::MouseSensitivity / 2) {
    distance = distance + TopSpeed;
  }
  if (distance == -SRTMouse_::MouseSensitivity / 2) {
    distance = distance - TopSpeed;
  }
  return distance;
}

void SRTMouse_::Arrow(unsigned long currentMillis){
  
  int Xreading = analogRead(XMousePin) - 512;
  int Yreading = analogRead(YMousePin) - 512;

  if (invertXY) {
    Xreading = analogRead(YMousePin) - 512;
    Yreading = analogRead(XMousePin) - 512;
  }


  if (invertY) {
    Yreading = map(Yreading, -512, 511, 511, -512);
  }

  if (abs(Xreading) < threshold) {
    Xreading = 0;
  }
  if (abs(Yreading) < threshold) {
    Yreading = 0;
  }

  Xreading = 0.5 * (Xreading - Yreading);
  Yreading = 0.5 * (Xreading + Yreading);

  if (currentMillis - keyPressedTime > keyPressedDelay) {

    Keyboard.releaseAll();
  }

  if (Xreading == Yreading) {
    return;
  }
  if (currentMillis - keyPressedTime > delayNextPress) {
    keyPressed = false;
  }

  if (!keyPressed && !onlyShowValue) {


    if (Xreading > 0) {
      if (Yreading > 0) {
        if (invertX) {
          Keyboard.press(KEY_LEFT_ARROW);
        }
        else {
          Keyboard.press(KEY_RIGHT_ARROW);
        }
        keyPressed = true;
        keyPressedTime = currentMillis;
        setAction(currentMillis);
      }

      else {
        if (!invertY) {
          Keyboard.press(KEY_UP_ARROW);
        }
        else {
          Keyboard.press(KEY_DOWN_ARROW);
        }
        keyPressed = true;
        keyPressedTime = currentMillis;
        setAction(currentMillis);
      }
    }
    else {
      if (Yreading > 0) {
        if (!invertY) {
          Keyboard.press(KEY_DOWN_ARROW);
        }
        else {
          Keyboard.press(KEY_UP_ARROW);
        }
        keyPressed = true;
        keyPressedTime = currentMillis;
        setAction(currentMillis);
      }

      else {
        if (invertX) {
          Keyboard.press(KEY_RIGHT_ARROW);
        }
        else {
          Keyboard.press(KEY_LEFT_ARROW);
        }
        keyPressed = true;
        keyPressedTime = currentMillis;
        SRTMouse_::setAction(currentMillis);
      }

    }
  }
}




void SRTMouse_::setMouse(bool sendData, unsigned long currentMillis){


     if (!invertXY) {
    xReading = readAxis(SRTMouse_::XMousePin);
    yReading = readAxis(SRTMouse_::YMousePin);
  }
  else {
    xReading = readAxis(SRTMouse_::YMousePin);
    yReading = readAxis(SRTMouse_::XMousePin);
  }

  if (invertX) {
    xReading = map(xReading, -MouseSensitivity, MouseSensitivity, MouseSensitivity, -MouseSensitivity);
  }
  if (invertY) {
    yReading = map(yReading, -MouseSensitivity, MouseSensitivity, MouseSensitivity, -MouseSensitivity);
  }
  if (getMouseMode() && !onlyShowValue) {
    if (currentMillis - lastMove > 20) { //20 is the refreshRate
      Mouse.move(xReading, yReading, 0);
      lastMove = currentMillis;
    }
  }
  else {
    SRTMouse_::Arrow(currentMillis);
  }
    
    if (sendData) {
    if (SRTMouse_::getMouseMode()) {
      Serial.print("Mouse Mode. ");
    }
    else {
      Serial.print("Arrow Mode. ");
    }
    Serial.print("Mouse Position : ");
    Serial.print(analogRead(XMousePin));
    Serial.print(", ");
    Serial.print(analogRead(YMousePin));
    if (!digitalRead(SwitchMousePin)) {
      

    }
    Serial.println(".");
    Serial.print(startedToClick);
  }

  if (!digitalRead(SwitchMousePin) && lastClickState == false) { //si on est enfoncé alors qu'avant on ne l'était pas, on note le temps de départ
    startedToClick = currentMillis;
    lastClickState = true;
  }

  if (digitalRead(SwitchMousePin) && lastClickState == true) { //si on détecte un relâchement
    if ( currentMillis - startedToClick > configMouseDelay) { // si on était enfoncé depuis longtemps :
      mouseMode = !mouseMode;
      Keyboard.releaseAll();
    }
    else {if(!onlyShowValue){                                            // si on n'était pas enfoncé depuis longtemps :
      if (mouseMode) {
        Mouse.press(); 
      }
      else {
        Keyboard.press(KEY_RETURN);
      }}
      lastClick = currentMillis;
    }
    setAction(currentMillis);
    lastClickState = false;
  }
  if (currentMillis - lastClick > clickPressed) {
    if (mouseMode) {
      Mouse.release();
    }
    else {
      Keyboard.release(KEY_RETURN);
    }
  }
   }