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 hereDer 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
