C++ Dynamisches Objekt

OP #4677913
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 #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 #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.
#4677935
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.
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 :)
(Firma: Torrox.de) #4677964
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.