Funktion in der gleichen Zeile neudefiniert



  • Der Compiler schrieb:

    trace_functions.h: In function 'float TraceGetDistanceFromKoordinats(float, float, float, float)':
    trace_functions.h: ➡ 4: error: redefinition of 'float TraceGetDistanceFromKoordinats(float, float, float, float
    trace_functions.h: ➡ 4: error: 'float TraceGetDistanceFromKoordinats(float, float, float, float)' previously de
    trace_functions.h: In function 'float TraceGetDistanceFromXYDistance(float, float)':
    trace_functions.h: ➡ 27: error: redefinition of 'float TraceGetDistanceFromXYDistance(float, float)'
    trace_functions.h: ➡ 27: error: 'float TraceGetDistanceFromXYDistance(float, float)' previously defined here

    Der Kompiler meint , das die Funktion in der gleichen Zeile neudefiniert wird 😕

    Ich bin noch nicht sehr bewandert im Thema der Compiler-Nachrichten-Auslese , deshalb möchte ich einen erfahreneren Programierer um Hilfe beten .

    Der Quellcode ist meines Erachtens richtig ; bei zweifeln bin ich aber bereit , ihn zu posten . Thx im Voraus



  • Würde sagen in trace_functions.h fehllen die include-guards.
    Kurt



  • Dann lass Dir von erfahrenen Programmierern direkt folgendes sagen:

    - Zu Fehlermeldungen sind _mindestens_ die Code-Zeilen die angemeckert werden zu posten.
    - Dein Code ist nicht korrekt, sonst gäbe es keine Fehlermeldungen 😉



  • //Zeile 4
    float TraceGetDistanceFromKoordinats(float xi , float yi , float xj , float yj ) {
    
    //Zeile 27
    float TraceGetDistanceFromXYDistance(float DistanceX , float DistanceY) {
    

    So , dass wären die Zeilen
    Jetzt noch ne Frage : Was sind include-guards ?



  • Include-Guards sind sowas (.h-Datei):

    #if !defined(dieser_include_wurde_bereits_eingefuegt)
    #define dieser_include_wurde_bereits_eingefuegt
    
    /* Der Code */
    
    #endif // dieser_include_ist_jetzt_eingefuegt_worden ;)
    

    Der Name muss natürlich für jede .h Datei anders lauten, ich nehme immer sowas wie VGS_PROGRAMMNAME_DATEINAME_H wobei VGS mein Namenskürzel in der Firma ist 😉



  • Dein Problem dürfte es sein, daß du den selben Header doppelt in dein Quellfile eingebunden hast - damit hast du letztendlich zwei (gleichlautende) Definitionen deiner Funktionen. Und an der Stelle greifen die Include-Guards: Beim ersten Einbinden werden die Funktionen ganz normal definiert (und das Macro "dieser_include_wurde_bereits_eingefügt", bei einem zweiten Anlauf greift die "#if !defined..." Zeile und überspringt die ganzen Definitionen.

    PS: Übrigens solltest du die Funktionen im Header sowieso nur deklarieren, sonst beschwert sich der Linker über doppelte Definitionen.



  • Danke , hat funktioniert

    bin froh das ich gefragt hab sonst wär ich die ganze Zeit im dunkeln herumgetappt 😃


Anmelden zum Antworten