Hallo liebe Community, weis Jemand, wieso folgender Code nicht funktioniert? Compiler: Error: Identifier "DMX" is undefined in "Main/Main.cpp", Line: 16, Col: 14 #include "Configuration.h" #include "DMX512.h" void startup ( void ) { Configuration* DMX = new Configuration; }; int main ( void ) { startup ( ); //Application Code int i = DMX -> s_DMX_Config_struct.baudrate; }; LG Christian
Christian K. schrieb: > weis Jemand, wieso folgender Code nicht funktioniert? weil dmx nicht global ist.
Eventuell weil DMX in main nicht bekannt ist ? (wird ja nur lokal in Startup definiert)
Weil du erst mal ein C Buch lesen solltest. Was sagt dir der Ausdruck: "scope of variables"
Ich dachte der new Operator legt mir ein Objekt auf dem Heap an. Wieso kann ich dann nicht mit dem Zeiger DMX auf das Objekt zugreifen?
C-Buch aufschlagen, und dann such mal nach Scope... Dein Objekt DMX existiert nach startup() nicht mehr. Abgesehen davon hast du ein sauberes Speicherleck programmiert.
Christian K. schrieb: > Ich dachte der new Operator legt mir ein Objekt auf dem Heap an. macht er auch > Wieso kann ich dann nicht mit dem Zeiger DMX auf das Objekt zugreifen? weil du keine Variabel hast die auf das Objekt zeit - du hast ein speicherloch geschaffen.
Christian K. schrieb: > Ich dachte der new Operator legt mir ein Objekt auf dem Heap an. Wieso > kann ich dann nicht mit dem Zeiger DMX auf das Objekt zugreifen? Das aendert ja nichts daran, dass das Objekt am Ende der Funktion zerstoert wird.
Könnte jemand mal ein Beispiel geben, wie man es anders machen kann? Ich würde gerne ein Objekt in einer Methode erstellen, auf welches ich im gesamten Programm zugreifen kann.
Kaj schrieb: > Das aendert ja nichts daran, dass das Objekt am Ende der Funktion > zerstoert wird. nein, wird es nicht. Der Zeiger wird zerstört das objekt aber nicht.
Christian K. schrieb: > Könnte jemand mal ein Beispiel geben, wie man es anders machen kann? Ich > würde gerne ein Objekt in einer Methode erstellen, auf welches ich im > gesamten Programm zugreifen kann. wurde doch schon gesagt, du brauchst eine globale Variable.
Christian K. schrieb: > Wieso kann ich dann nicht mit dem Zeiger DMX auf das Objekt zugreifen? Weil die Funktion 'startup' die Position nicht preisgibt. Die Alternative wäre:
1 | Configuration* startup () |
2 | {
|
3 | return new Configuration; |
4 | };
|
*Aber!* Hier fehlt noch die Prüfung, ob überhaupt ein Objekt angelegt werden konnte. Und du musst dich natürlich auch noch um die spätere Freigabe des Objekts kümmern.
:
Bearbeitet durch User
So? #include "Configuration.h" #include "mbed.h" #include "DMX512.h" Configuration *DMX; void startup ( void ) { DMX = new Configuration; }; int main ( void ) { startup ( ); //Application Code int i = DMX -> s_DMX_Config_struct.baudrate; };
Peter II schrieb: > du brauchst eine globale Variable. Nein, braucht er nicht. Eine lokale Variable in main und ein return in startup reichen. Mit einer globalen Variablen kann man es machen, muss man aber nicht. ------- Da war Ralf schneller :)
Kaj schrieb: > Nein, braucht er nicht. oder doch. Er will im gesamten Programm darauf zugreifen. Damit müsste er an jeder Funktion das objekt übergeben - was bei thread schon schwer wird.
Christian K. schrieb: > Könnte jemand mal ein Beispiel geben, wie man es anders machen kann? Ich > würde gerne ein Objekt in einer Methode erstellen, auf welches ich im > gesamten Programm zugreifen kann.
1 | #include "Configuration.h" |
2 | #include "DMX512.h" |
3 | |
4 | Configuration startup() |
5 | { |
6 | return Configuration(); |
7 | }; |
8 | |
9 | Configuration DMX = startup(); |
10 | |
11 | int main() |
12 | { |
13 | //Application Code |
14 | int i = DMX.s_DMX_Config_struct.baudrate; |
15 | }; |
C++ ist nicht C, aber auch nicht Java.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.