Hallo an die Experten,
ich habe ein grösseres Programm, das ich in einzelne Module aufteilen will. Mein Programm habe ich jetzt sehr sehr stark vereinfacht für das Forum.
Ich habe ein Hauptprogramm (hier halt das setup). Vorher definiere ich in einer H-Datei die globalen Variablen. Dann noch eine h und cpp datei, die ich funki nenne. In der h Datei deklariere ich die Funktion, in die cpp-Datei schreibe ich rein, was die Funktion machen soll. Weise ich im setup der Variablen einen neuen Wert zu (i=2), kommt was von multiple defintion und da steige ich gedanklich aus, weil ich die Definition in globals gemacht habe. Was mache ich falsch.
Ich hoffe, dass dies mein Problem in dem grösseren Programm ist.
danke für die Antwort.
#include "globals.h"
#include "funki.h"
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
funki_funk();
i = 2;
funki_funk();
}
void loop() {
// put your main code here, to run repeatedly:
}
Ein include guard dürfte hier nichts helfen, da das für die .ino und die .cpp 2 getrennte Übersetzungsläufe sind. Ein include Guard hilft nur gegen mehrfaches includieren innerhalb eines Übersetzungslaufes.
Das Problem entsteht beim linken, da bei beiden Übersetzungsläufen eine Variable i angelegt wird. In der globals.h darf i nur deklariert werden (mit 'extern'). Angelegt werden darf die Variable dann nur entweder in der .ino oder der .cpp
Edit: unanhängig dabon ist ein include Guard immer eine gute Idee - speziell bei vielen Headerdateien, die selbst auch wieder Headerdateien includieren.
langsam ich muss das alles erst probieren, ich bin schon etwas älter. jeder tip bringt mich etwas weiter. nur meine verdauungsgeschwindigkeit ist altermäßig begrenzt.
Du kannst übrigens Dein Programm auch auf mehrere ino-Dateien im Verzeichnis aufteilen. Die Haupt-Datei muss weiterhin so heißen, wie das Verzeichnis, die anderen kannst Du beliebig benennen, sinnvollerweise nach ihrem Inhalt.
Was das Alter betrifft, sind hier wohl viele älter, als Du.
danke das mit dem extern hat funktioniert. wieder ein stück schlauer.
alle anderen tipps waren auch wichtig. alter, auch wenn nicht wichtig: c++ mit 58 anfangen und arduino noch dazu ist lustig. ich will nicht irgendwelchen code kopieren und dann nicht wissen, warum etwas nicht funktioniert. ich komme von fortran und das war 1985. aber das forum hier ist echt klasse. immer eine antwort oder tip und das sofort, hätt ich nie gedacht.
danke nochmal
Ich sage immer "Man ist so alt, wie man sich fühlt!" Also heute Abend bin ich über 90
Falls die 56 bei Tommy auf das Baujahr anspielen, dann habe ich bis zu dem Alter noch 18 Jahre Zeit...