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
Gast
#4677917
Christian K. schrieb: > weis Jemand, wieso folgender Code nicht funktioniert? weil dmx nicht global ist.
Gast
#4677918
Eventuell weil DMX in main nicht bekannt ist ? (wird ja nur lokal in Startup definiert)
Gast
#4677919
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?
Gast
#4677922
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.
Gast
#4677925
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.
Gast
#4677929
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.
Gast
#4677931
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.
Gast
#4677933
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.
Gast
#4677934
Peter II schrieb: > nein, wird es nicht. Ja, hab mich unsauber ausgedrueckt.
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 | |
2 | |
3 | |
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.
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;
};
Gast
#4677938
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 :)
Gast
#4677942
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
C++ ist nicht C, aber auch nicht Java.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.