INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
struct übergeben
24.01.2021, 11:41
Beitrag #1
struct übergeben
Hallo,
zur Darstellung des Problems habe ich alles, was nicht unmittelbar damit zusammenhängt herausgenommen.
In einer Library habe ich ein struct außerhalb aller Klassen definiert:
Code:
typedef struct {
  byte red, green, blue;
} color;
Innerhalb der Klasse habe ich eine public Variable und eine Methode definiert:
Code:
class Myclass {
  color farbe;
  void lesen(color farbe);
};
In der Methode wird die Farbe ermittelt:
Code:
void Myclass::lesen(color farbe) {
  farbe.red = 1;
  farbe.green = 2;
  farbe.blue = 3;
}
Wie kann ich im Hauptprogramm auf diese Farbe zugreifen?
- Ist es überhaupt richtig, das struct in der Library außerhalb der Klassen zudefinieren?
- Ist es richtig, die Variable farbe in der Header-Datei zu definieren?
- Public?
Ich weiß, dass ich von OOP (noch) keine Ahnung habe; ich bin im Buch erst auf Seite 100 von 1000.
Ich bitte um einen Tipp mit ein paar Codezeilen - damit habe ich die Chance, darauf aufzubauen.
Gruß Karl

Karl Stanger
www.stangerweb.de
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2021, 13:10
Beitrag #2
RE: struct übergeben
In OOP werden die Methoden, die etwas lesen als Getter und die die schreiben als Setter bezeichnet.

Ich weiß zwar nicht, was Deine Klasse inhaltlich machen soll, aber Deine Methode wäre dann ein Getter und der muss einen Rückgabewert haben.
Eigentlich solte der Wert von Color schon in der Instanz vorhanden sein.

Color sollte groß geschrieben werden, da ein struct in C++ eine Klasse ist, in der alles public ist. Typedef kannst Du weg lassen.

Code:
Color Myclass::getColor() {
  Color c;
  c.red = 1;
  c.green = 2;
  c.blue = 3;
  return c;
}

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2021, 13:32 (Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2021 13:35 von MicroBahner.)
Beitrag #3
RE: struct übergeben
Nun ja, das typedef könnte man schon so lassen. Dass definiert ja nur den Aufbau der Struktur. In der Klasse ist ja eine lokale private Instanz davon definiert. Wenn er die Struktur setzen oder zurückgeben will, dann muss auch das aufrufende Programm den Aufbau der Struktur kennen. Insofern ist es schon ok mit dem typedef.
Aber Karl sollte schonmal genauer erklären, welche Funktionalität seine Klasse haben soll. Sonst machen alle Ratschläge keinen Sinn.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2021, 13:42
Beitrag #4
RE: struct übergeben
Einspruch. Das geht auch ohne typedef.

MyInc.h:
Code:
#pragma once
struct Color {
    byte red, green, blue;
};

test.ino:
Code:
#include "MyInc.h"

void setup() {
Color c;
}

void loop() {}

Ich glaube die Klasse wird Klasse um der Klasse willen. Deshalb ist es ja auch so schwer möglich sinnvolle Hilfe zu geben.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2021, 14:11
Beitrag #5
RE: struct übergeben
(24.01.2021 13:42)Tommy56 schrieb:  Ich glaube die Klasse wird Klasse um der Klasse willen. Deshalb ist es ja auch so schwer möglich sinnvolle Hilfe zu geben.
Ja, da ist was dran. Kann man zum Üben zwar machen, aber trotzdem sollte man sich vorher überlegen, was die Klasse den machen soll. Sonst wird das nichts vernünftiges.

(24.01.2021 13:42)Tommy56 schrieb:  Einspruch. Das geht auch ohne typedef.
ja stimmt - ist noch alte 'C' Gewohnheit Angel

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2021, 14:18
Beitrag #6
RE: struct übergeben
Hmm - das Thema Getter und Setter ist mir bekannt. Ich habe aber in dem schlauen Buch weiter gelesen und jetzt eine Lösung gefunden, und zwar mit Übergabe per Referenz.
Variable und Methode sind jetzt:
Code:
class Myclass {
  color &farbe;
  void lesen(color &farbe);
};
Die Methode ist jetzt:
Code:
void Myclass::lesen(color &farbe) {
  farbe.red = 1;
  farbe.green = 2;
  farbe.blue = 3;
}
Und der Aufruf im Hauptprogramm:
Code:
color farbe;
Myclass myclass;
...
myclass.lesen(farbe);

Ist das ok, oder funktioniert das zwar, führt aber später zu Problemen?

Gruß Karl

Karl Stanger
www.stangerweb.de
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2021, 14:25
Beitrag #7
RE: struct übergeben
Eine Methode namens lesen, die einen Wert setzt ist schon ziemlich merkwürdig.

Du solltest erst mal darüber nachdenken, was die Klasse machen soll und uns das dann mitteilen. Weil so, wie das jetzt ist, macht es keinen Sinn und ist vergeudete Zeit.
Ob das mit der Refernz gut ist, kann man ohne bessere Informationen nicht sagen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2021, 14:57
Beitrag #8
RE: struct übergeben
Namen sind Schall und Rauch! Ich hätte die Methode knurpsi nennen sollen Big Grin
Beim nächsten Mal erzähle ich auch was von meinem Projekt; dieses Mal hätte das zu weit geführt.
LG Karl

Karl Stanger
www.stangerweb.de
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Prozedurname als Parameter übergeben DO3GE 1 681 11.04.2020 15:30
Letzter Beitrag: GuaAck
  struct-Objekt - Werte zuweisung zeigt merkwürdiges Verhalten Jan99 3 852 31.01.2020 12:10
Letzter Beitrag: Tommy56
  Klasse in andere cpp übergeben Phila 9 2.328 27.04.2019 17:29
Letzter Beitrag: Tommy56
  Klasse(Object) übergeben harry1952 5 2.043 14.01.2019 20:18
Letzter Beitrag: Tommy56
  Pointer auf Struct-Werte im PROGMEM rkuehle 2 1.491 30.09.2018 18:15
Letzter Beitrag: rkuehle
  Lora uint8_t Potiwerte übergeben gandalf7588 1 1.499 08.04.2018 13:23
Letzter Beitrag: Tommy56
  Struct mit Defaultdaten ohne initalisieren nutzen? da_user 14 3.922 22.03.2018 19:11
Letzter Beitrag: da_user
  Daten per PHP an MYSQL übergeben ArduM0 4 3.481 09.08.2017 19:52
Letzter Beitrag: Bitklopfer
  String übergeben oOSpikeOo 9 7.903 28.03.2017 19:47
Letzter Beitrag: georg01
  Ein als "const" deklariertes Array übergeben Retian 5 2.179 08.11.2016 18:39
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste