error: 'satpos::orbit' has not been declared, keine ahnung wo der fehler liegt

pointhi

Erfahrenes Mitglied
Hy, ich progge noch immer an meiner Bibliotek für satellitenberechnung. Sie ist schon wesentlich weiter (umfasst jetzt über 5000 Zeilen, davon 1500 Zeilen Programmcode). Leider hab ich jetzt ein problem das ich nicht lösen kann (und auch mein AINF-Lehrer nicht findet)

Wie im titel schon zu sehen kommt die Meldung:

Code:
...\satpos\satpos_time.hpp|71|error: 'satpos::orbit' has not been declared

Der Betreffende Programmteil lautet:

Code:
    public: int OrbitIn( satpos::orbit *pOrbitIn ); // Orbit data in

Davor gibt es diesen Programmteil der problemlos funktioniert aber keine wesentlichen unterschiede zum fehlerhaften aufweist:

Code:
    public: int TleIn( satpos::tle *pTleIn );       // Tle data in

Natürlich sind die entsprechenden Klassendateien includiert:

Code:
#include "satpos_tle.hpp"
#include "satpos_orbit.hpp"

Wenn ich satpos::eek:rbit durch satpos::tle ersetze funktioniert alles. Es wird auch nur dieser einzige fehler angezeigt, obwohl auf satpos::eek:rbit auch von anderen Header-Files verwendet wird.

Da die zusammenhänge sehr komplex sind und ich nicht immer weitere codeteile zusammenhanglos posten will hab ich einfach das komplette programm angehängt. Es besteht aus den Programm-Files im Ordner satpos, und einem Code-Blocks Projekt. main.cpp ist nur eine grundlage um funktionen der bibliotek zu testen und um ein Main-File zu haben. Die Libary ist komplett in Ansi-Cpp und das letzte mal als ich getestet habe hat sie auf Windows und Ubuntu problemlos kompiliert (nur Visual C++ wird warscheinlich bocken).

CMakeLists ist vorhanden, wird aber nur fehler fabrizieren. Ich hab es nocht nie in meinem Leben geschafft eigene, bzw. andere CMakeLists mit CMake (gui Version) zu Projektfiles, ect. Konvertieren. Wenn wer ein sehr gutes Tutorial dazu hat bitte sagen.

Ich hab leider Keine ahnung was das Problem ist. Würde mich um Hilfe freuen, ist ja viel arbeit drinnen und ich will nicht funktionen wegen fehler löschen die später noch öfters auftreten könnten. (Irgendwann fehlen in der Libary immer irgendwo funktionen weils der compiler nicht so mag)

mfg. pointhi
 

Anhänge

  • satpos.zip
    75,7 KB · Aufrufe: 10
Fehler gefunden, ich hab aber 0 ahnung warum das so ist.

Problembehebung: löschen von #include "satpos_time.hpp" in #include "satpos_orbit.hpp"

Problem dabei: Warum funktioniert das ohne include dann?, Ich will den Datentypen satpos::time in satpos::eek:rbit einbinden um die funktion allgemein abstrakter und skallierbarer zu gestalten. Das kann ich dann vergessen weil der compiler ohne include den datentyp nicht kennt.

Villeicht habt ihr eine ahnung warum das so ist. Widerspricht eigentlich dem layout der libary bzw. von objekten bzw. von #ifndef _SATPOS_TIME_H

mfg. pointhi
 
Hallo pointhi,

du hast hier eine zyklische Abhängigkeit. satpos_orbit.hpp will satpos_time.hpp einbinden, was aber wiederum satpos_orbit.hpp einbinden möchte. Zu dem Zeitpunkt ist aber _SATPOS_ORBIT_H bereits definiert und der Includewächter sorgt dafür, dass satpos_orbit.hpp nicht in satpos_time.hpp eingebunden wird.

Das lässt sich aber recht leicht durch eine Vorwärtsdeklaration lösen, z.B. in satpos_orbit.hpp:

C++:
namespace satpos
{

class time; // Forward declaration

class orbit
    {
// …
        satpos::time    *timeSatellite;
// …
    };  // end of the class orbit

}   // end of the namespace satpos

Grüße,
Matthias

P.S.: CMake funktioniert bei meinen Projekten prima, muss also an dir liegen. Ich schau mal ob ich zu deinem Projekt ein CMakeFile gestrickt bekomme.

\edit: Im Anhang ein Satz von CMakeFiles, welche bei mir funktioniert haben (mit Visual Studio 10).
 

Anhänge

  • satpos.zip
    1,2 KB · Aufrufe: 5
Zuletzt bearbeitet:
Danke, ein anderer lehrer hat das nach einiger zeit auch gefunden. Ist aber nicht einfach gewesen alle zusammenhänge zu finden. Die Bibliotek wurde komplett umgeschrieben und wird noch weiter geändert werden, damit alles professionell ist. Z.b. besitzen .hpp dateien absofort keine #include mehr, sondern nur noch Vorwärtsdeklarationen.

mfg. pointhi
 

Neue Beiträge

Zurück