Array in Methode eines Objektes



  • hallo Leute,

    ich habe eine Klasse printer, die als strukturierte Schnittstelle Funktionen eines Messgerätes bündelt, die mit verschiedenen Methoden und Membern ausgestattet ist, um z.B. Stati abzufragen und bestimmten Datensätze zu verarbeiten. In dieser Klasse nutze ich die Funktionen die von der Dll des Gerätes bereitgestellt werden. Das ist nur zur groben Info, da eher unwichtig.

    Ich habe meine uralten Programmierkenntnisse erst für dieses Projekt wieder aufgefrischt, da ich vorher nicht Programmiert habe.

    Ich habe eine Methode Printer::statusaktuell, die wie folgt aussieht:

    void Printer::statusaktuell(){
    	statdyn[0] = get_print_status(1); //get_print ist aus Systemlib des Drucker
    ///Hier folgen weitere Werte fürs array
    }
    

    die in der main innerhalb eines Timers aufgerufen wird und den aktuellen Statuskanal alle 100ms ausliest, dabei werden die Werte das Array statdyn geschrieben, dass Member ist.
    Initialisert etc ist vorher alles.

    ...
    m_printer->statusaktuell();
    ...
    

    Da ich versuche Sauber zu programmieren, setze ich Getter/Setter ein und komme dabei in die Lage ein Array als Rückgabewert zu liefern.

    Meine Get Methode sieht so aus:

    unsigned short* Printer::getPrinterDyn(){
    	return statdyn;
    }
    

    und in der main dann

    unsigned  short* test = m_printer->getPrinterDyn();
    

    Wenn ich die Funktion get_print_status(1) in der main ganz studipe im Timer auslese ohne Klasse, ändern sich der Wert beim ausschalten des Gerätes. Mit der Klasse nicht, weil ich vermutlich die Sache mit den Pointern falsch mache und falsch adressiere oder so. Ich bin euch unendlich dankbar für Vorschläge!



  • Du gibst hier nicht den Wert des ersten (oder irgendeines) Array-Elements zurück, sondern die Adresse des Arrays (des ersten Elements). Die ändert sich natürlich nicht, wenn du das Gerät ausschaltest. statdyn ist vom Typ unsigned short, ja? Probier doch mal, stattdessen statdyn[0] zurückzugeben. Den Rückgabetyp der Funktion musst du dann natürlich auch anpassen ( unsigned short statt unsigned short* ).

    Btw, wieso muss es eigentlich ein Array sein? Ich sehe hier nur, dass das erste Element des Arrays ( statdyn[0] ) verwendet wird. Nutzt du auch noch mehr vom Array? Falls nicht, kannst du dir das ja sparen und ganz einfach eine Variable vom Typ unsigned short verwenden.


Anmelden zum Antworten