oop protectete variablen ausgeben.

Man kann von jeder Variablenart Arrays machen.
Das stimmt denke ich nicht ganz. Von einer Klasse ohne Default-Konstruktor kann kein Array angelegt werden. Es sei denn man initialisiert das Array gleich bei der Definition, was aber nur funktioniert wenn es einen nicht-expliziten Konstruktor (mit nur einem Argument) gibt oder der Kopierkonstruktor öffentlich ist. Zumindest ist mir keine Möglichkeit bekannt, wie man in diesem (Rand-)Fall ein Array anlegen kann.

Grüße,
Matthias
 
Es funktioniert jetzt in etwa wie ich es will. Nur protecten kann ich die variablen wegen Compilierfehlern nicht.

hier die satpos.h:

C++:
#ifndef _SATPOS_H
#define _SATPOS_H

namespace satpos
{

/*###########################################################
Klassenname:        satpos::tle_data
Vererbungen:        keine
Erstellungsdatum:   29.10.2011
Letzte Änderung:    29.10.2011
Programmierer:      pointhi
Beschreibung:       Diese Klasse ist für die Speicherung der TLE-Daten zuständig
###########################################################*/
    class tle_data{

//#################### Variablen

        public:     // Öffentliche Variablen

            char                tle_satname[20];    // Name des Sateliten
            unsigned int        tle_nr;             // NORAD-Katalog-Nr.
            char                tle_klass;          // Klassifizierung
            char                tle_intklass[9];    // Internationale Klassifizierung
            long double         tle_epoche;         // Epoche mit Jahr & Tag_Nr. , Tagesbruchteil
            double              tle_widspg;         // Widerstandskoeffizient im SGP-Modell
            double              tle_vwidspg;        // vernachlässigbarer Widerstandskoeffizient im SGP-Modell
            double              tle_widspg4;        // Widerstandskoeffizient im SGP4-Modell
            unsigned int        tle_eph;            // Ephemeridentyp
            unsigned int        tle_dnr;            // laufende Datensatz-Nummer
            unsigned int        tle_prfs;           // Prüfsumme Modulo 10
            double              tle_ink;            // Inklination
            double              tle_rek;            // Rektaszension des aufsteigenden Knotens ?
            double              tle_exz;            // numerische Exzentrizität der Umlaufbahn
            double              tle_per;            // Argument des Perigäums ?
            double              tle_mano;           // Mittlere Anomalie ?
            double              tle_mbew;           // Mittlere Bewegung n
            unsigned int        tle_ulnr;           // Umlauf Nr. seit dem Start

        protected:  // Geschützte Variablen

        private:    // Unsichtbare Variablen

//#################### Funktionen

        public: tle_data();     // Konstruktor der Klasse

    };

/*###########################################################
Klassenname:        satpos::tle
Vererbungen:        public tle_data
Erstellungsdatum:   29.10.2011
Letzte Änderung:    29.10.2011
Programmierer:      pointhi
Beschreibung:       Diese Klasse ist für die Ein und Ausgabe der TLE-Daten zuständig
###########################################################*/
    class tle : public tle_data{

//#################### Funktionen

        public: static int load(satpos::tle_data *tin_write, char tle_input[]);
        public: static int out(satpos::tle_data *tout_out);
    };
}

#endif

irgendwie funktioniert die vererbung von tle_data auf tle nicht.
C++:
class tle : public tle_data{

ich hab public, protected und private funktioniert, aber keine deklaration funktioniert damit ich auf protectete variablen zugreifen kann.

Gehört jetzt nicht zum Thema, aber:

Um die TLE-Daten von einem Textfile in die richtigen Variablen zu schreiben benötige ich einen speziellen Befehl, um auch nicht standard TLE-Dateien einlesen zu können.

Es handelt sich um einem Befehl der ein bestimmtes zeichen ab einer bestimmten position sucht. Als rückgabewert benötige ich dann die position, wenn das zeichen gefunden wurde. Wisst ihr wie die funktion heißt? std::strcspn hat leider keinen übergabewert für die niedrigste zeilennummer und gefunden hab ich auch nichts das so funktioniert.

mfg. pointhi
 
Zuletzt bearbeitet:
Code:
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|74|warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|22|error: 'unsigned int satpos::tle_data::tle_nr' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|75|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|23|error: 'char satpos::tle_data::tle_klass' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|77|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|24|error: 'char satpos::tle_data::tle_intklass [9]' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|79|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|24|error: 'char satpos::tle_data::tle_intklass [9]' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|80|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|24|error: 'char satpos::tle_data::tle_intklass [9]' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|81|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|24|error: 'char satpos::tle_data::tle_intklass [9]' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|82|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|24|error: 'char satpos::tle_data::tle_intklass [9]' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|83|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|24|error: 'char satpos::tle_data::tle_intklass [9]' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|84|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|24|error: 'char satpos::tle_data::tle_intklass [9]' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|85|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|24|error: 'char satpos::tle_data::tle_intklass [9]' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|86|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|24|error: 'char satpos::tle_data::tle_intklass [9]' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|87|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|25|error: 'double satpos::tle_data::tle_epoche' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|90|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|26|error: 'double satpos::tle_data::tle_widspg' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|93|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|27|error: 'double satpos::tle_data::tle_vwidspg' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|98|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|28|error: 'double satpos::tle_data::tle_widspg4' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|104|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|29|error: 'unsigned int satpos::tle_data::tle_eph' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|106|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|30|error: 'unsigned int satpos::tle_data::tle_dnr' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|109|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|38|error: 'unsigned int satpos::tle_data::tle_prfs1' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|111|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|31|error: 'double satpos::tle_data::tle_ink' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|115|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|32|error: 'double satpos::tle_data::tle_rek' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|118|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|33|error: 'double satpos::tle_data::tle_exz' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|122|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|34|error: 'double satpos::tle_data::tle_per' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|125|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|35|error: 'double satpos::tle_data::tle_mano' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|128|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|36|error: 'double satpos::tle_data::tle_mbew' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|131|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|37|error: 'unsigned int satpos::tle_data::tle_ulnr' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|134|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|39|error: 'unsigned int satpos::tle_data::tle_prfs2' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|136|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|38|error: 'unsigned int satpos::tle_data::tle_prfs1' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|139|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|21|error: 'char satpos::tle_data::tle_satname [20]' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|158|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|22|error: 'unsigned int satpos::tle_data::tle_nr' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|160|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|23|error: 'char satpos::tle_data::tle_klass' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|161|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|24|error: 'char satpos::tle_data::tle_intklass [9]' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|162|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|25|error: 'double satpos::tle_data::tle_epoche' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|163|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|26|error: 'double satpos::tle_data::tle_widspg' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|164|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|27|error: 'double satpos::tle_data::tle_vwidspg' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|165|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|28|error: 'double satpos::tle_data::tle_widspg4' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|166|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|29|error: 'unsigned int satpos::tle_data::tle_eph' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|167|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|30|error: 'unsigned int satpos::tle_data::tle_dnr' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|168|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|31|error: 'double satpos::tle_data::tle_ink' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|169|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|32|error: 'double satpos::tle_data::tle_rek' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|170|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|33|error: 'double satpos::tle_data::tle_exz' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|171|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|34|error: 'double satpos::tle_data::tle_per' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|172|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|35|error: 'double satpos::tle_data::tle_mano' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|173|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|36|error: 'double satpos::tle_data::tle_mbew' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|174|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|37|error: 'unsigned int satpos::tle_data::tle_ulnr' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|175|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|38|error: 'unsigned int satpos::tle_data::tle_prfs1' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|176|error: within this context|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.hpp|39|error: 'unsigned int satpos::tle_data::tle_prfs2' is protected|
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_tle.cpp|177|error: within this context|
||=== Build finished: 111 errors, 1 warnings ===|

Das wären dann die Fehler.
Immer das gleiche, da ich jetzt alle auf protectet verschoben habe.

mfg. pointhi
 
Hier ist die CPP-Date, falls von interresse, das projekt besteht jetzt schon aus 5cpp und 4hpp dateien, aber es geht jetzt nur um diese eine, ich übernehme dass dann wenn nötig in die anderen.

C++:
#include "satpos_tle.hpp"
#include "satpos_func.hpp"
#include <iostream>
#include <cstdlib>
#include <cstring>

/*###########################################################
Funktionsname:      satpos::tle_data::tle_data
Übergabewerte:      keine
Rückgabewerte:      keine
Erstellungsdatum:   29.10.2011
Letzte Änderung:    29.10.2011
Programmierer:      pointhi
Beschreibung:       Diese Funktion initialisiert die TLE Variablen der Klasse satpos::tle_data
###########################################################*/
satpos::tle_data::tle_data() {

tle_satname[0]      = '\0';     // Name des Sateliten
tle_nr              = 0;        // NORAD-Katalog-Nr.                                        ü
tle_klass           = '\0';     // Klassifizierung                                          ü
tle_intklass[0]     = '\0';     // Internationale Klassifizierung                           ü
tle_intklass[8]     = '\0';     // Internationale Klassifizierung                           ü
tle_epoche          = 0;        // Epoche mit Jahr & Tag_Nr. , Tagesbruchteil               ü
tle_widspg          = 0;        // Widerstandskoeffizient im SGP-Modell
tle_vwidspg         = 0;        // vernachlässigbarer Widerstandskoeffizient im SGP-Modell
tle_widspg4         = 0;        // Widerstandskoeffizient im SGP4-Modell
tle_eph             = 0;        // Ephemeridentyp                                           ü
tle_dnr             = 0;        // laufende Datensatz-Nummer
tle_prfs1           = 0;        // Prüfsumme Modulo 10                                      ü
tle_prfs2           = 0;        // Prüfsumme Modulo 10
tle_ink             = 0;        // Inklination
tle_rek             = 0;        // Rektaszension des aufsteigenden Knotens ?
tle_exz             = 0;        // numerische Exzentrizität der Umlaufbahn
tle_per             = 0;        // Argument des Perigäums ?
tle_mano            = 0;        // Mittlere Anomalie ?
tle_mbew            = 0;        // Mittlere Bewegung n
tle_ulnr            = 0;        // Umlauf Nr. seit dem Start
}

/*###########################################################
Funktionsname:      satpos::tle::load
Übergabewerte:      satpos::tle_data *twrite
                    char tle_input[]
Rückgabewerte:      0   ... Erfolg
                    1   ... Es wurde kein TLE-Datensatz gefunden
                    >1  ... Fehler
Erstellungsdatum:   29.10.2011
Letzte Änderung:    29.10.2011
Programmierer:      pointhi
Beschreibung:       Diese Funktion beschreibt die Klasse satpos::tle_data
                    aus einer Char-Array im NORAD-Format (NASA-Format)
###########################################################*/
int satpos::tle::load(satpos::tle_data *tin_write, char tin_tlin[]) {
//tin_write->tle_epoche =       06040.85138889l;
int tin_pos = -1;    // Aktuelle Position in der char-Array
int tin_x = 1;      // Hilfsvariable für schleifen
int tin_lengh = 0;
char tin_shelp[20];
int tin_ihelp=0;
double tin_dhelp=0;
tin_lengh = std::strcspn( tin_tlin, "\0" );

// suchen des Datensatzes

while(tin_x)
    {
    tin_pos = std::strcspn( tin_tlin, "1");
    if(tin_pos==-1 || tin_pos > tin_lengh-138){return 1;}   // Gibt einen Fehler zurück wenn kein gültiger TLE-Datensatz gefunden wurde
    else if(tin_tlin[tin_pos+1]==32 && tin_tlin[tin_pos+8]==32 && tin_tlin[tin_pos+16]==32 && tin_tlin[tin_pos+69]=='\n' && tin_tlin[tin_pos+70]=='2' && tin_tlin[tin_pos+71]==32){tin_x = 0;}
    }


// NORAD-Katalog-Nr.
tin_shelp = {(tin_tlin[tin_pos + 2]),(tin_tlin[tin_pos + 3]),(tin_tlin[tin_pos + 4]),(tin_tlin[tin_pos + 5]),(tin_tlin[tin_pos + 6]), '\0'};
tin_write->tle_nr           = std::atoi(tin_shelp);
// Klassifizierung
tin_write->tle_klass        = tin_tlin[tin_pos + 7];
// Internationale Klassifizierung
tin_write->tle_intklass[0]  = tin_tlin[tin_pos + 9];
tin_write->tle_intklass[1]  = tin_tlin[tin_pos + 10];
tin_write->tle_intklass[2]  = tin_tlin[tin_pos + 11];
tin_write->tle_intklass[3]  = tin_tlin[tin_pos + 12];
tin_write->tle_intklass[4]  = tin_tlin[tin_pos + 13];
tin_write->tle_intklass[5]  = tin_tlin[tin_pos + 14];
tin_write->tle_intklass[6]  = tin_tlin[tin_pos + 15];
tin_write->tle_intklass[7]  = tin_tlin[tin_pos + 16];
tin_write->tle_intklass[7]  = '\0';
// Epoche
satpos::func::strtls(tin_tlin, tin_shelp, (tin_pos + 18), 13);
tin_write->tle_epoche       = std::atof(tin_shelp);
// Widerstandskoeffizient im SGP-Modell
satpos::func::strtls(tin_tlin, tin_shelp, (tin_pos + 33), 9);
tin_write->tle_widspg       = std::atof(tin_shelp);
// vernachlässigbarer Widerstandskoeffizient im SGP-Modell
satpos::func::strtls(tin_tlin, tin_shelp, (tin_pos + 44), 7);
tin_ihelp = ((char)tin_tlin[tin_pos + 51])-48;
tin_dhelp = 1;for(;tin_ihelp >0;tin_ihelp --){tin_dhelp *= 0.1;}
tin_write->tle_vwidspg      = std::atof(tin_shelp) * tin_dhelp;
// Widerstandskoeffizient im SGP4-Modell
satpos::func::strtls(tin_tlin, tin_shelp, (tin_pos + 52), 6);
tin_shelp[0] = tin_shelp[1];tin_shelp[1] = '.';
tin_ihelp = ((char)tin_tlin[tin_pos + 60])-48;
tin_dhelp = 1;for(;tin_ihelp >0;tin_ihelp --){tin_dhelp *= 0.1;}
tin_write->tle_widspg4      = std::atof(tin_shelp) * tin_dhelp;
// Ephemeridentyp
tin_write->tle_eph          = ((char)tin_tlin[tin_pos + 62])-48;
// Laufende Datensatznummer
satpos::func::strtls(tin_tlin, tin_shelp, (tin_pos + 64), 3);
tin_write->tle_dnr          = std::atoi(tin_shelp);
// Prüfsumme1 Modulo 10
tin_write->tle_prfs1        = ((char)tin_tlin[tin_pos + 68])-48;

// Inklination
satpos::func::strtls(tin_tlin, tin_shelp, (tin_pos + 78), 7);
tin_write->tle_ink          = std::atof(tin_shelp);
// Rektaszension
satpos::func::strtls(tin_tlin, tin_shelp, (tin_pos + 87), 7);
tin_write->tle_rek          = std::atof(tin_shelp);
// Exzentritität
satpos::func::strtls(tin_tlin, tin_shelp, (tin_pos + 95), 7);
tin_shelp[0] = '.';
tin_write->tle_exz          = std::atof(tin_shelp);
// Argument des Perigäums
satpos::func::strtls(tin_tlin, tin_shelp, (tin_pos + 104), 7);
tin_write->tle_per          = std::atof(tin_shelp);
// Mittlere Anomalie
satpos::func::strtls(tin_tlin, tin_shelp, (tin_pos + 113), 7);
tin_write->tle_mano         = std::atof(tin_shelp);
// Mittlere Bewegung
satpos::func::strtls(tin_tlin, tin_shelp, (tin_pos + 122), 10);
tin_write->tle_mbew         = std::atof(tin_shelp);
// Mittlere Bewegung
satpos::func::strtls(tin_tlin, tin_shelp, (tin_pos + 133), 4);
tin_write->tle_ulnr         = std::atof(tin_shelp);
// Prüfsumme2 Modulo 10
tin_write->tle_prfs2        = ((char)tin_tlin[tin_pos + 138])-48;

std::cout << "\ntin_pos: " << tin_pos;
std::cout << "\ntin_lengh: " << tin_lengh;tin_write->tle_prfs1     = ((char)tin_tlin[tin_pos + 68])-48;   // Prüfsumme1 Modulo 10
return 0;
}

/*###########################################################
Funktionsname:      satpos::tle::out
Übergabewerte:      satpos::tle_data *tout
Rückgabewerte:      0   ... Erfolg
Erstellungsdatum:   29.10.2011
Letzte Änderung:    29.10.2011
Programmierer:      pointhi
Beschreibung:       Diese Funktion gibt die TLE-Daten der Klasse satpos::tle_data formatiert aus.
###########################################################*/
int satpos::tle::out(satpos::tle_data *tout_out) {

// Hier beginnt die Ausgabe der Werte:


std::cout << "\n-------------------------------------------------------------------\n";
std::cout << "\tTLE-Datensatz:\t" << tout_out->tle_satname << std::fixed;
std::cout << "\n-------------------------------------------------------------------\n";;
std::cout << "\nNORAD-Katalog-Nr.:\t\t\t"               << tout_out->tle_nr;
std::cout << "\nKlassifizierung:\t\t\t"                 << tout_out->tle_klass;
std::cout << "\nInternationale Bezeichnung:\t\t"        << tout_out->tle_intklass;      std::cout.precision(8);
std::cout << "\nEpoche:\t\t\t\t\t"                      << tout_out->tle_epoche;
std::cout << "\nWiderstandskoeffizent SPG-Modell:\t"    << tout_out->tle_widspg;        std::cout.precision(9);
std::cout << "\nv. Widerstandskoeffizent SPG-Modell:\t" << tout_out->tle_vwidspg;
std::cout << "\nWiderstandskoeffizent SPG4-Modell:\t"   << tout_out->tle_widspg4;
std::cout << "\nEphemeridentyp:\t\t\t\t"                << tout_out->tle_eph;
std::cout << "\nLaufende Datensatz-Nr.:\t\t\t"          << tout_out->tle_dnr;           std::cout.precision(4);
std::cout << "\nInklination:\t\t\t\t"                   << tout_out->tle_ink;
std::cout << "\nRektaszension:\t\t\t\t"                 << tout_out->tle_rek;           std::cout.precision(7);
std::cout << "\nExzentrizitaet:\t\t\t\t"                << tout_out->tle_exz;           std::cout.precision(4);
std::cout << "\nArgument des Perigaeums:\t\t"           << tout_out->tle_per;
std::cout << "\nMittlere Anomalie:\t\t\t"               << tout_out->tle_mano;          std::cout.precision(8);
std::cout << "\nMittlere Bewegung:\t\t\t"               << tout_out->tle_mbew;
std::cout << "\nUmlauf Nr. seit dem Start:\t\t"         << tout_out->tle_ulnr;
std::cout << "\nPruefsumme1 Modulo 10:\t\t\t"           << tout_out->tle_prfs1;
std::cout << "\nPruefsumme2 Modulo 10:\t\t\t"           << tout_out->tle_prfs2;

std::cout << "\n-------------------------------------------------------------------" << std::endl;
return 0;   // Melde Erfolg zurück
}

mfg. pointhi
 
Hi.

Wenn du nur erbst weil du auf geschützte bzw. private Attribute zugreifen willst ist das vom Design mies.

Entweder du verwendest friend Deklarationen oder du definierst Getter wie es bei OOP üblich ist, oder beides (geschützte Getter und friend class).

\edit: Namensräume solltest du nicht bei der Definition von Methoden einer Klasse angeben, sondern so:
C++:
namespace satpos {

int tle::load(satpos::tle_data *tin_write, char tin_tlin[]) {
  ...
}
\edit2:
pointhi hat gesagt.:
Gehört jetzt nicht zum Thema, aber:

Um die TLE-Daten von einem Textfile in die richtigen Variablen zu schreiben benötige ich einen speziellen Befehl, um auch nicht standard TLE-Dateien einlesen zu können.

Es handelt sich um einem Befehl der ein bestimmtes zeichen ab einer bestimmten position sucht. Als rückgabewert benötige ich dann die position, wenn das zeichen gefunden wurde. Wisst ihr wie die funktion heißt? std::strcspn hat leider keinen übergabewert für die niedrigste zeilennummer und gefunden hab ich auch nichts das so funktioniert.
Gibt es auch nicht. Du mußt schon die Datei selbst zeilenweise durchsuchen.

Gruß
 
Zuletzt bearbeitet:
Namensräume solltest du nicht bei der Definition von Methoden einer Klasse angeben, sondern so:

Warum soll ich das so machen?, ich will einfach nur bei solchen sachen eine begründung haben.
Das mit namspace, class in der header-datei hab ich von einer website übernommen wo das erklärt wurde.

Da werd ich wohl getter benutzen, jetzt mach ich einfach mal alles public, wenn man eine Bibliotek anwendet sollte man sowieso wissen was man da macht.

Ein kleines Problem habe ich noch, dabei geht es um zeiger auf zeiger. Ich hoffe mal das ist jetzt mal das letzte Problem dass ich mit Google nicht lösen konnte.

Hier der wichtige CPP-Code:

C++:
/*###########################################################
Funktionsname:      satpos::umlb::tle_to_umlb
Übergabewerte:      satpos::tle_data *ttu_tlein
                    satpos::umlb_data *ttu_umlbout
Rückgabewerte:      0   ... Erfolg
                    >0  ... Fehler
Erstellungsdatum:   29.10.2011
Letzte Änderung:    29.10.2011
Programmierer:      pointhi
Beschreibung:       Diese Funktion wandelt die TLE-Daten in die UMLB-Daten um
###########################################################*/
int satpos::umlb::tle_to_umlb(satpos::tle_data *ttu_tlein, satpos::umlb_data *ttu_umlbout) {

// einfaches Kopieren aller Daten die schon vorhanden sind.
ttu_umlbout->umlb_epoche    =   ttu_tlein->tle_epoche;  // Epoche mit Jahr & Tag_Nr. , Tagesbruchteil
ttu_umlbout->umlb_ink       =   ttu_tlein->tle_ink;     // Inklination
ttu_umlbout->umlb_rek       =   ttu_tlein->tle_rek;     // Rektaszension des aufsteigenden Knotens ?
ttu_umlbout->umlb_per       =   ttu_tlein->tle_per;     // Argument des Perigäums ?
ttu_umlbout->umlb_mbew      =   ttu_tlein->tle_mbew;    // Mittlere Bewegung n
ttu_umlbout->umlb_exz       =   ttu_tlein->tle_exz;     // numerische Exzentrizität der Umlaufbahn
ttu_umlbout->umlb_mano      =   ttu_tlein->tle_mano;    // Mittlere Anomalie ?
ttu_umlbout->umlb_widspg    =   ttu_tlein->tle_widspg;  // Widerstandskoeffizient im SGP-Modell
ttu_umlbout->umlb_widspg4   =   ttu_tlein->tle_widspg4; // Widerstandskoeffizient im SGP4-Modell

// Umlaufzeit T
ttu_umlbout->umlb_umlz      =   (2*M_PI)/(ttu_umlbout->umlb_mbew);
//



satpos::umlb::ttu_hse(&ttu_tlein,&ttu_umlbout);

return 0;
}

/*###########################################################
Funktionsname:      satpos::umlb::ttu_hse
Übergabewerte:      satpos::tle_data *tuhse_tlein
                    satpos::umlb_data *tuhse_umlbout
Rückgabewerte:      0   ... Erfolg
                    >0  ... Fehler
Erstellungsdatum:   29.10.2011
Letzte Änderung:    29.10.2011
Programmierer:      pointhi
Beschreibung:       Berechnen der großen und kleinen Halbachse
###########################################################*/
int satpos::umlb::ttu_hse(satpos::tle_data **tuhse_tlein, satpos::umlb_data **tuhse_umlbout) {

//tuhse_umlbout->umlb_epochejr = 1;
return 0;
}

Ich rufe dabei die Funktion so auf:

C++:
satpos::umlb::tle_to_umlb(&tle_track, &umlb_track);

Die berechnungen möchte ich dann in weiteren Funktionen untergliedern, wo die beiden pointer wieder übergeben werden. Es funktioniert solange ich keinen code in der
C++:
int satpos::umlb::ttu_hse(satpos::tle_data **tuhse_tlein, satpos::umlb_data **tuhse_umlbout)

ausführe, wenn ich doch auf den pointer zugreife kommt folgende Fehlermeldung:

Code:
C:\Users\User\Programmieren\C++\satelitentracking\satelite_tracking\satpos\satpos_umlb.cpp|93|error: request for member 'umlb_epochejr' in '* tuhse_umlbout', which is of non-class type 'satpos::umlb_data*'|

wenn das Problem gelöst ist sollte programmtechnisch nichts mehr im wege stehen. Dann müssen nur noch die Formeln passen und alles richtig vernetzt sein.

mfg. pointhi
 
Zuletzt bearbeitet:
Hi

gibt es einen speziellen Grund, warum es ein Zweifach-Pointer sein soll?
Wenn du es mit einem einfachen machst, sollte das auch gehen.

Der Fehler ist deswegen, weil -> nur einen * auflöst.
C++:
a->b
ist ja nur eine andere Schreibweise für
C++:
(*a).b
Hier brauchst du aber
C++:
(**a).b
 
der grund für den doppelten zeiger ist da ich so viel wie möglich mit zeigern machen möchte, kopieren dauert zeit, ist unnötig bei meiner anwendung, braucht speicher und ich muss sowieso die daten irgendwie übergeben. und wenn ich nur einen zeiger mache gibt der compiler mir eine Fehlermeldung.

Danke es funkt mit
C++:
(**a).b
.

Jetzt sollte ich programmtechnisch alles richtig programmieren können. Fehlen nur noch die richtigen Formeln und Algorithmen.

mfg. pointhi
 
Zurück