"Multiple Definition of." Warum?

Gast #2409792
Lesenswert?

Hallo!

Könnt ihr euch bitte den angehängten Code durchlesen? Wenn ich das 
gesamte Projekt compilieren möchte, dann schreit der Compiler in der 
angehängten 'GlobalVar.h'. Folgende Kommentare gibt er mehrmals aus:
1
Multiple Definition of 'ArrowPosition'
2
Multiple Definition of 'CurrentFrame'
3
Multiple Definition of 'Private_ArrowPosition'
4
Multiple Definition of 'Private_CurrentFrame'

Könnt ihr was damit anfangen, oder benötigt ihr die anderen Dateien 
auch?

Mfg Marcus
Angehängte Dateien:
Gast #2409796
Lesenswert?

Zu deinem eigentlichen Problem kann ich nicht beitragen, aber deine 
Überprüfung, ob GetSet nun auf Get oder Set steht, wird so nicht 
funktionieren.
1
if (GetSet = Set)
GetSet wird so der Wert Set zugewiesen. Was du aber brauchst, ist der 
Vergleichsoperator ==.

Gruß,
AVerr
Gast #2409863
Lesenswert?

Danke!

Das Problem mit "Multiple Definition of ..." habe ich jetzt nicht mehr. 
Allerdings sagt er mir jetzt "Undefined reference to '...'" überall, wo 
ich eine der beiden Funktionen aufrufe. Ich verstehe nicht, warum er es 
nicht nimmt weil es bei den anderen Funktionen ja auch funktioniert. 
Oder liege ich da falsch?

In der Interrupts.c setzte ich diese Funktionen ein.
Angehängte Dateien:
Gast #2409985
Lesenswert?

Stefan Ernst schrieb:
> In dieser Header-Datei befinden sich Definitionen. Wenn sie in deinem
> Projekt mehrfach inkludiert wird, hast du mehrfache Definitionen für die
> gleichen Objekte. Und genau das sagen dir die Fehlermeldungen.

Und wieso soll das nicht durch
1
#ifndef GlobalVar
2
#define GlobalVar
3
...
4
#endif

verhindert werden?
#2409989
Lesenswert?

Thomas schrieb:
> Stefan Ernst schrieb:
>> In dieser Header-Datei befinden sich Definitionen. Wenn sie in deinem
>> Projekt mehrfach inkludiert wird, hast du mehrfache Definitionen für die
>> gleichen Objekte. Und genau das sagen dir die Fehlermeldungen.
>
> Und wieso soll das nicht durch
>
1
> #ifndef GlobalVar
2
> #define GlobalVar
3
> ...
4
> #endif
5
>
>
> verhindert werden?

Weil meherer C-Files voneinander unabhängig compiliert werden. 
Include-Guards (so nennt man diese Konstrukte) befassen sich mit anderen 
Problemen. Bei include-Guards geht es um Mehrfachdefinitionen in einer 
Übersetzungseinheit. Das hier beschriebene Problem ist aber ein 
Linkerproblem.
Gast #2409993
Lesenswert?

@Daniel: Hat sich zwar schon erledigt, aber trotzdem: Ich verwende 
AVR-Studio 5. "FrameHome()" ist die vorübergehende Lösung für den 
"Homebildschirm" auf dem DOGM128. Die Get-Set Methode verwende ich 
eigentlich nur weil ich etwas neues probieren wollte. Später sollen 
einige Werte in ein externes Flash gespeichert werden. Ich möchte 
nämlich ein kleines OS für meinen AT644 schreiben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren