TinyGPS++.h Objektorientiert (und schon erledigt)

Ich hab momentan ein Verständnisproblem und dann Schwierigkeiten mit der Erweiterung

Gegeben ist ein
GPS-Empfänger am ESP32 (Genau genommen ein TTGO T-Beam) und die Library TinyGPSPlus

Der originale Sketch ist von hier
https://github.com/DeuxVis/Lora-TTNMapper-T-Beam

Ich lese das wie folgt:

Die Klasse gps verwendet als Membervariable (?) die komplette TinyGPSPLus, zumindest steht im Konstruktor:

 TinyGPSPlus tGps;

Innerhalb von Objekten meiner Klasse gps kann ich (auch) auf Variablen und Methoden der TinyGPSPlus zugreifen.
Ich kann in meinem Sketch Funktionen der TinyGPSPlus nutzen (z.B. eine Distanzberechnung zwischen zwei Koordinaten), die eigentlich nichts mit meinem Objekt gps zu tun haben.
Was ich per se nicht hinbekomme, von außen auf die Struktur location des Objektes gps zuzugreifen.
Warum steht diese aus TinyGPSPlus nicht zur Verfügung?
Also z.B. der Zugriff auf Koordinaten

Serial.println(gps.location.lng());   // PROBLEM:

Ich habe die wesentliche Teile in einen Tab zusammengefasst um mein Problem zu verdeutlichen:
sobald ich das Problemkind aktiviere bekomm ich einen

‘class gps’ has no member named ‘location’

Wie könnte ich darauf doch zugreifen (ohne eine separate Methode zu erstellen)???

/*
   Verwenung eines GPS Objekts ähnlich
   https://github.com/DeuxVis/Lora-TTNMapper-T-Beam 
 */

#include <TinyGPS++.h>
#include <HardwareSerial.h>

#define GPS_TX 12
#define GPS_RX 15

const uint8_t txBufferSize = 10;
uint8_t txBuffer[txBufferSize];                  // for payload data to be sent. 9 GPS, 1 BatteryVoltage,

uint32_t previousMillis1, previousMillis2;
const uint16_t intervall1 = 1000;
const uint16_t intervall2 = 3000;

HardwareSerial GPSSerial(1);

class gps
{
  public:
    void init();
    bool checkGpsFix();
    void buildPacket(uint8_t txBuffer[txBufferSize]);
    void encode();
    float latitude, longitude;
    //changes by noiasca
    uint16_t altitudeGps;                 // was private
    float lastLoraLat, lastLoraLng;       // last sent coordinates
    uint32_t lastLoraBuilt;               // timestamp from last sent coordinates

    TinyGPSPlus tGps;                     // was private ... und hilft gar nix wenns public ist ...

  private:
    uint32_t LatitudeBinary, LongitudeBinary;
    uint8_t hdopGps;
    char t[32];                           // used to sprintf for Serial output

};

void gps::init()
{
  GPSSerial.begin(9600, SERIAL_8N1, GPS_TX, GPS_RX);
  GPSSerial.setTimeout(2);
}


void gps::encode()
{
  int data;
  int previousMillis = millis();

  while ((previousMillis + 1000) > millis())
  {
    while (GPSSerial.available() )
    {
      char data = GPSSerial.read();
      tGps.encode(data);
      //Serial.print(data);
    }
  }
  //Serial.println("");
}

void gps::buildPacket(uint8_t txBuffer[txBufferSize])
{
  latitude = tGps.location.lat();
  longitude = tGps.location.lng();

  Serial.print(F("last:")); Serial.println(lastLoraLat, 6);
  Serial.print(F("now :")); Serial.println(latitude, 6);
  lastLoraLat = latitude;                                
  lastLoraLng = longitude;
  lastLoraBuilt = millis();


  // convert lat/lng to fit into 3 byte values
  LatitudeBinary = ((latitude + 90) / 180.0) * 16777215;
  LongitudeBinary = ((longitude + 180) / 360.0) * 16777215;

  txBuffer[0] = ( LatitudeBinary >> 16 ) & 0xFF;
  txBuffer[1] = ( LatitudeBinary >> 8 ) & 0xFF;
  txBuffer[2] = LatitudeBinary & 0xFF;

  txBuffer[3] = ( LongitudeBinary >> 16 ) & 0xFF;
  txBuffer[4] = ( LongitudeBinary >> 8 ) & 0xFF;
  txBuffer[5] = LongitudeBinary & 0xFF;

  altitudeGps = tGps.altitude.meters();
  txBuffer[6] = ( altitudeGps >> 8 ) & 0xFF;
  txBuffer[7] = altitudeGps & 0xFF;

  hdopGps = tGps.hdop.value() / 10;
  txBuffer[8] = hdopGps & 0xFF;

  Serial.print(F("Lat:")); Serial.print(tGps.location.lat(), 6);
  Serial.print(F(" Lng:")); Serial.print(tGps.location.lng(), 6);
  Serial.print(F(" Alt:")); Serial.print(tGps.altitude.meters());
  Serial.print(F(" HDOP:")); Serial.print(tGps.hdop.value() / 10);
  Serial.print(F(" HDOP_age:")); Serial.print(tGps.hdop.age());
  Serial.print(F(" Speed:")); Serial.print(tGps.speed.kmph());
  Serial.println();
}

bool gps::checkGpsFix()
{
  encode();
  if (tGps.location.isValid() &&
      tGps.location.age() < 2000 &&
      tGps.hdop.isValid() &&
      tGps.hdop.value() <= 300 &&
      tGps.hdop.age() < 2000 &&
      tGps.altitude.isValid() &&
      tGps.altitude.age() < 2000 )
  {
    Serial.println(F("Valid gps Fix."));
    return true;
  }
  else
  {
    Serial.println(F("No gps Fix."));
    sprintf(t, "location valid: %i" , tGps.location.isValid());
    Serial.println(t);
    sprintf(t, "location age: %i" , tGps.location.age());
    Serial.println(t);
    sprintf(t, "hdop valid: %i" , tGps.hdop.isValid());
    Serial.println(t);
    sprintf(t, "hdop age: %i" , tGps.hdop.age());
    Serial.println(t);
    sprintf(t, "hdop: %i" , tGps.hdop.value());
    Serial.println(t);
    return false;
  }
}

gps gps;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println(F("ESP32 GPS OOP demo"));
  gps.init();

  Serial.print(F("Entfernung zwischen zwei Punkten in m:"));
  Serial.println(TinyGPSPlus::distanceBetween(48, 16, 47, 15));
}

void loop() {
  // put your main code here, to run repeatedly:
  if (millis() - previousMillis1 > intervall1)  // Intervall 1 - vergleiche die Aktuelle Position mit den seltener gesendeten Koordinaten
  {
    if (gps.checkGpsFix())
    {
      //Zugriff auf definierte public Variablen des Objektes
      Serial.print(F("latitude=")); 
      Serial.println(gps.latitude);

      //kein Zugriff auf Struktur der Membervariable aus TinyGPSPlus
      //Serial.print(F("Problemkind:"));
      //Serial.println(gps.location.lng();   // PROBLEM: 'class gps' has no member named 'location'
    }
    previousMillis1 = millis();
  }

  if (millis() - previousMillis2 > intervall2)  // Intervall 2 - Erstelle ein TX Packerl mit den Koordinaten
  {
    
    if (gps.checkGpsFix())
    {
      gps.buildPacket(txBuffer);
    }
    previousMillis2 = millis();
  }
}

Zum Programm:

die checkGpsFix() ruft den encoder auf (und aktualisiert damit intern die Struktur location)
die Methode buildPacket() stellt Koordinaten in einen txBuffer (und nutzt dabei die Struktur location).

Schlussendlich will ich in einem größeren Intervall Koordinaten übermitteln und in einem kürzem Intervall die aktuelle GPS-Position mit den zuletzt gesendeten Koordinaten vergleichen.

Was ich per se nicht hinbekomme, von außen auf die Struktur location des Objektes gps zuzugreifen.

Dein gps Objekt hat keine Eigenschaft namens location, also alles ok so.

class gps

Tipp:
Klassennamen groß schreiben!

Denn dieses sieht fürchterlich aus:
gps gps;

Besser:
Gps gps;

Suchst du vielleicht sowas:

Serial.println(gps.tGps.location.lng());

? ? ?
ungetestet

wtf ... das wars ... 5 Zeichen vs. 5 Stunden.

Serial.println(gps.tGps.location.lng(),6);   // no PROBLEM:

Danke/Karma