Hallo,
kann mir jmd. für mich als Anfänger schlüssig erklären, warum ich die Variable buffersize im Zusammenhang mit commandbuffer nur kompiliert bekomme, wenn ich const und static davorschreibe?
class Image // Deklaration der Klasse Image
{
private:
const static byte buffersize = 17; // Größe des Char-Buffers zur RX-Auswertung (Größe unveränderlich)
char commandbuffer[buffersize]; // Char-Buffer in dem ausgewertet wird
};
Gruß Chris
wegen dem =17;
Eine normale Member-Variable kannst du natürlich nicht in der Klassendeklaration initialisieren.
Und damit kannst du natürlich auch keine feste Array-Größe deklarieren.
michael_x:
normale Member-Variable
Kannst Du etwas genauer beschreiben, was das ist? Ich kenne lediglich Funktionen, Variablen, Methoden und Attribute.
Was ist eine "normale Member-Variable"?
Gruß Chris
Was ist eine "normale Member-Variable"?
Ist ein Attribut vermutlich, hab wohl c++ auf Englisch gelernt. Dass class "Klasse" heisst und instance "Instanz" ist ja einfach.
Aber hier taucht das Wort "attribute" in anderer Bedeutung auf:
The keyword public determines the access attributes of the members of the class that follow it.
Wenn du mit "Attribut" eine Variable meinst, dann ist das eher Java-Terminologie oder ein ganz allgemeiner Begriff. In C++ wird der Begriff so eigentlich nicht verwendet.
Member Variable = Variable die zu einer Klasse gehört. Genauso wie Funktionen in Klassen Member Funktionen heißen. Diese werden dann wiederum eingeteilt in statische Member Variablen (auch Klassenvariable), die keinem Objekt zugeordnet sind. Und nicht-statische Member Variablen (auch Instanzvariable oder Objektvariable), von denen jedes Objekt eine eigene Version hat.
Diese werden erst mit der Instantiierung eines Objekts erzeugt. Du kannst die daher nicht dazu verwenden ein Array zu erzeugen. Man kann zwar const Variablen auch erst im Konstruktor initialisieren, aber die kann man dann immer noch nicht als Größe für ein Array verwenden.
Du kannst die Größe auch mit einem #define Makro festlegen.
Danke für die Aufklärung.
Und was macht man dann, wenn man innerhalb einer Instanz ein Array benötigt?
Gruß Chris
Na so wie in deinem Eintrag #1 war doch gut, oder ?
Am besten war, dass du das selbst rausgefunden hast.
Ich hoffe, die Erklärungen warum das so geht, haben etwas geholfen... 
Da es mir keine Ruhe gelassen hat, habe ich eine zu diesem Thread passende Textpassage aus meinem 1062 Seiten starken C++ Lehrbuch rausgesucht, die mich mich nachhaltig fragen lässt, ob ich das richtige Buch lese.
Gruß Chris
Dass mit Funktionen und Methoden stimmt schon so. Den Unterschied mache ich in meinen Beiträgen auch ganz bewusst. Du wirst (hoffentlich) nie erleben dass sich von einer Methode rede wenn sie zu keiner Klasse gehört.
Den Begriff "Elementfunktion" habe ich noch nicht gehört, aber es muss wohl eine deutsche Übersetzung von "Memberfunktion" geben. 
Das ist da Verwirrung mit den Begriffen gibt es ganz normal. Es gibt manchmal mehrere Begriffe für die gleiche Sache und dann unterscheidet sich das teilweise von Sprache zu Sprache (siehe z.B. den Begriff "Attribut"). C++ ist außerdem eine Multi-Paradigma Sprache, die auf einer prozeduralen Sprache (C) aufsetzt. Daher ist nicht alles aus einem Guss.
Danke für die Erklärung. Ist manchmal echt nicht einfach durchzusteigen bei dem ganzen Zeugs. 
Gru Chris
Das mit Funktionen und Methoden stimmt schon so
Ja. Ich würde auch "method" mit Methode und "function" mit Funktion übersetzen.
Und / oder minimal-Beispielcode verwenden.
class A {
int _m; // a private member variable
int func(); // a private method
public:
int p; // a public member variable, similar to a property
int foo(); // a public method
static int sfoo(); // a public static method
};
int foo(); // a public function, different from A::foo
Serenifly:
Member Variablen.. ..werden dann wiederum eingeteilt in statische Member Variablen (auch Klassenvariable), die keinem Objekt zugeordnet sind. Und nicht-statische Member Variablen (auch Instanzvariable oder Objektvariable), von denen jedes Objekt eine eigene Version hat.
Ist dann p eine statische Member Variable und _m eine nicht-statische Member Variable?
class A {
int _m; // a private member variable
int func(); // a private method
public:
int p; // a public member variable, similar to a property
int foo(); // a public method
static int sfoo(); // a public static method
};
int foo(); // a public function, different from A::foo
Gruß Chris
Nein. Statische Variable sind "static"