Rene K. schrieb:
Wilhelm M. schrieb:
richtigen Fachtermini
Ich kenne scheinbar die richtigen Fachtermini nicht. :-)
Ja.
Hast Du wenigstens ein C++-Buch? Welches?
So mich hat es nur gewundert das ich die Klasse an den Markierten
stellen nochmal anweisen muss, obwohl ich die den Return der Funktion in
der Klasse schon definiert habe.
//in HEADER
...
1 |
ConvBytes From16Bit(uint16_t vari);
|
Die Zeile stammt aus der Definition der Klasse und Du deklarierst damit die Elementfunktion From16Bit(...). Eine Elementfunktion ist wie der name sagt ein Element der Klasse. Deswegen ist der Name der Funktion auch <Klassenname>::<Elementfunktionsname>(...).
DraconixClass::ConvBytes DraconixClass::From16Bit(uint16_t vari)
{
}
Diese Zeile steht sozusagen "auf der grünen Wiese", also außerhalb jeder Klasse (oder Namensraum). Damit muss Du den vollständigen Funktionsnamen angeben.
Der Rückgabetyp ist ein geschachtelter Typ. Hier gilt ähnliches: der vollständige Name ist <OuterClass>::<nestedClass>. Da Du eben auf der grünen Wiese bist, musst Du auch hier den vollständig qualifizierten Namen angeben.
BTW: Deine Funktionen sind "echte" Funktionen (im mathematischen Sinn), d.h. sie haben keinen internen Zustand bzw. hängen auch nicht vom Objektzustand ab. Daher kannst / solltest Du sie auch als freie Funktionen schreiben (oder als static-Elementfunktionen)
Wenn es doch non-static Elementfunktionen sein sollen aus irgendwelchen Gründen, dann sollten sie als Beobachterfunktionen d.h. const (read-only) qualifiziert werden.
Leere Parameterlisten in C++ sind einfach f() und nicht f(void) wie in C.
Primitive Datentypen sollten immer initialisiert werden, am besten durch in-class-initializer.
1 |
class DraconixClass{
|
2 |
public:
|
3 |
DraconixClass(); // Was soll der std-ctor machen?
|
4 |
|
5 |
struct ConvBytes {
|
6 |
uint8_t LByte{0};
|
7 |
uint8_t HByte{0};
|
8 |
};
|
9 |
|
10 |
void begin(); // muessen wohl Mutatoren sein, daher non-const
|
11 |
void handle(); // Welche Datenelemente sollen die ändern?
|
12 |
|
13 |
// ggf. als freie Funktionen bzw. static
|
14 |
ConvBytes From16Bit(uint16_t vari) const;
|
15 |
uint16_t To16Bit(ConvBytes vari) const;
|
16 |
uint16_t To16Bit(uint8_t LVari, uint8_t HVari) const;
|
17 |
};
|
und beispielhaft
1 |
DraconixClass::ConvBytes DraconixClass::From16Bit(const uint16_t vari) {
|
2 |
return {vari & 0xff, (vari >> 8) & 0xff}; // Aggregat-Initialisierung
|
3 |
}
|
Das waren jetzt nur ein paar Hinweise und ggf- Tips zum Weiterlesen...