Globale Variable nicht global?

Hallo,

ich möchte eine Variable global definieren, sodass sie auch innerhalb unterschiedlicher funktionen verwendbar ist. das ganze funktioniert auch, solange ich mich in einem arduino-sketch befinde. wenn ich die variable aber innerhalb einer funktion, die in einem externen file (.ccp) liegt, das mit #include ".ccp" eingefügt ist, bekomme ich eine Fehlermeldung "was not declared in this scope". wie muss ich vorgehen, dass die variable auch ausserhalb des sketches als deklariert erkannt wird?

Eine extern Deklaration, könnte das sein was du suchst.

Das mußt Du schon genauer erklären. Ein #include "*.cpp" ist mir unbekannt, was soll das denn bewirken?

Normalerweise sucht der Linker nach Programmteilen, die noch benötigt werden, mit #include nach obigem Muster hat das nichts zu tun. Stattdessen wäre es hilfreich, die globale Variable in einer eigenen Header-Datei (*.h) zu deklarieren, und diese Datei dort zu #includen, wo der Compiler die angegebene Fehlermeldung ausspuckt.

wenn ich die variable aber innerhalb einer funktion,

Dann ist es keine globale sondern lokale Variable, egal in welchem File die Funktion definiert wird.

Grüße Uwe

Hahi: ... bekomme ich eine Fehlermeldung "was not declared in this scope". ...

Das kommt mir bekannt vor. Wenn ich mich recht erinnere, habe ich das auf die Art gelöst, die DrDittrich vorschlägt: Auslagern globaler Deklarationen in eine Headerdatei (*.h). Die kannst Du dann per

#include "foo.h"

in die anderen cpp-Dateien einbinden.

Gruß

Gregor

Also es ist so: (lassen wir das mit der *.cpp):

Ich habe ein *ino File mit einer Funktion f1 und ein *.h file, in dem sich f2 befindet . f1 und f2 sollen auf die selbe Variable zugreifen können. Wenn ich die Variable im *ino global definiere, also gleich ganz oben (nicht innerhalb der Funktion f1), kann ich sie auch wunderbar innerhalb f1 verwenden. Wenn die f2 aus dem *.h File aufgerufen wird, gibt es einen Error "was not declared in this scope". Umgekehrt das gleiche: wenn ich die Variable innerhalb des Files *.h definiere, steht sie dort der Funktion zur Verfügung und der Error kommt im *ino-File. Jetzt kommt aber das witzigste: Wenn ich die Variable mal zum Spaß in beiden Files definiere, kommt ein Error "multiple definition of...". Der Compiler checkt also doch, dass die Variable schon definiert ist. Warum steht sie dann aber nicht im Programmablauf zur Verfügung?

Den allerersten Tip extern solltest du berücksichtigen

Hahi: Warum steht sie dann aber nicht im Programmablauf zur Verfügung?

Nutzt du die Arduino-IDE so wie vorgesehen, dann reicht die herkömmliche (global) Definition im Haupt-Tab. Benennst du deine weiteren Tabs OHNE Extension .cpp. Dann kümmert sich die IDE darum.

Nennst du den tab mit .cpp braucht es Tipp #1

Lesestoff https://github.com/arduino/Arduino/wiki/Build-Process

Hahi: Also es ist so: (lassen wir das mit der *.cpp):

Ich habe ein *ino File mit einer Funktion f1 und ein *.h file, in dem sich f2 befindet . f1 und f2 sollen auf die selbe Variable zugreifen können. Wenn ich die Variable im *ino global definiere, also gleich ganz oben (nicht innerhalb der Funktion f1), kann ich sie auch wunderbar innerhalb f1 verwenden. Wenn die f2 aus dem *.h File aufgerufen wird, gibt es einen Error "was not declared in this scope". Umgekehrt das gleiche: wenn ich die Variable innerhalb des Files *.h definiere, steht sie dort der Funktion zur Verfügung und der Error kommt im *ino-File. Jetzt kommt aber das witzigste: Wenn ich die Variable mal zum Spaß in beiden Files definiere, kommt ein Error "multiple definition of...". Der Compiler checkt also doch, dass die Variable schon definiert ist. Warum steht sie dann aber nicht im Programmablauf zur Verfügung?

Warum in verwirrender Prosa? Denn so versteht ich dich nicht, wir haben noch kein gemeinsames Vokabular.

Baue doch bitte ein minimales Beispiel, welches deine Probleme zeigt. Dann kann man eine Diagnose machen und dich (evtl) auf den Fehler hinweisen.

Dir jetzt ein C++ Buch vorlesen, weil es dir zu anstrengend ist selber eins zu lesen, mache ich nicht.

Tipp: Denke in "Übersetzungseinheiten"! Dann wird dir klar, was da passiert. Und auch das "Warum?".

Hahi: Ich habe ein *ino File mit einer Funktion f1 und ein *.h file, in dem sich f2 befindet . f1 und f2 sollen auf die selbe Variable zugreifen können.

Dann ist es doch nur logisch, auch die gemeinsame Variable in der Header-Datei zu erwähnen,

Hallo zusammen, Also es hatte nichts mit dem Einbinden des *.h -File zu tun. Um multiple Deklaration zu vermeiden, musste ich "extern" verwenden, hab das aber ursprünglich falsch verwendet. Ich dachte, ich müsste die variable dann immer extern deklarieren. nun habe ich es folgendermassen gemacht und war damit erfolgreich:

im *ino:

bool Stby_Status;

und in der zweiten Datei:

extern bool Stby_Status;