C++ Zeiger
-
Hey, danke für eure Antworten

Den & Operator braucht man aber außer bei Zeigern nicht, oder?
CreateDevice gibt einfach einen Zeiger zurück. Das kann ein gültiger Zeiger (respektive ein Zeiger, der auf ein Objekt zeigt), oder einer, der nicht gültig ist, was dann einfach 0 ist. (Beachte hier aber, dass es nicht so etwas, wie NULL ist, wie in anderen Sprachen, sondern einfach ein gültiger Wert, der einfach anderst interpretiert werden muss). CreateDevice wird auf jeden Fall "richtig" ausgeführt, kann aber unter Umständen 0 zurückgeben (ich gehe jetzt einfach mal davon aus, dass das so ist..) , was signalisieren soll, dass ein Fehler passiert ist.
Ist IrrlichtDevice denn vergleichbar mit Variablentypen? Denn der Zeiger wurde ja vorher nicht definiert (z.B. als int).
Und hier beim nächsten Code:device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");steht device->... was heißt das?
Sry für meine blöden Fragen , aber ich als ehemaliger BB prorammierer, komme von dem alten Prinzip nur schwer los, da sagt man zum Beispiel: mesh = LoadMesh(), wobei mesh eine Variable ist und den Wert von LoadMesh zurückliefert..
mfg
Schoasch
-
Üblicherweise wird der &-Operator lediglich in Zusammenhang mit Zeigern gebraucht ja.
Doch device wird deklariert:
IrrlichtDevice *device =createDevice(video::EDT_SOFTWARE,dimension2d<s32>(640, 480), 16,false, false, false, 0);und ist vom Typ IrrlichtDevice, was eine Klasse ist.
-
Danke für deine Antwort

Aber wird durch device-> einfach nur ein weiterer Wert über den Zeiger an die Klasse IrrlichtDevice übergeben?
mfg
Schoasch
-
IrrlichtDevice *device = createDevice( ... );device ist ein Zeiger auf ein Irrlicht-Objekt.
*device ist das Objekt hinter dem Zeiger.device->doSomething();ist kurz für
(*device).doSomething();und das solltest du ja kennen.
Und schaff dir bitte ein ordentliches Grundlagenbuch an. Wenn du aus den paar Kommentaren schlau geworden bist, sagt das nix gutes über dein Buch (oder deine non-digitalen Lesefähigkeiten ;)) aus.
-
Schoasch schrieb:
Den & Operator braucht man aber außer bei Zeigern nicht, oder?
Doch.
int x = 2342; int y = x & 1; // Bitwise AND int& r = x; // Reference int* p = &x; // Address-OfSchoasch schrieb:
Ist IrrlichtDevice denn vergleichbar mit Variablentypen? Denn der Zeiger wurde ja vorher nicht definiert (z.B. als int).
IrrlichtDevice ist eine Klasse, welche irgendwo definiert wurde.
IrrlichtDevice* (der zusätzliche Stern) bedeutet, dass man einen Zeiger auf ein IrrlichtDevice Objekt möchte.
IrrlichtDevice** bedeutet, dass man einen Zeiger auf einen Zeiger auf ein IrrlichtDevice Objekt möchte.
IrrlichtDevice*** bedeutet, dass man einen Zeiger auf einen Zeiger auf einen Zeiger usw.
Schoasch schrieb:
device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");steht device->... was heißt das?
Das ist der
operator ->. Erbedeutet das gleiche wie:
(*device).
Also das Objekt wird dereferenziert und danach wird auf ein entsprechendes Element des Objekts zugegriffen. In diesem Fall ist es diesetWindowCaptionFunktion.Aber ganz ehrlich, das sind absolute Grundlagen. Das findest du in jedem vernünftigen Grundlagenbuch. Es gibt wirklich genügend Lektüre ...
Grüssli
-
Danke für eure Antworten

Aber was bringt sich das wenn man sagt IrrlichtDevice *device = CreateDevice()?
Viel einfacher wäre es doch zu schrieben IrrlichtDevice.CreateDevice();
Denn CreateDevice ist doch eine Funktion von der Klasse IrrlichtDevice, und gibt daher auch einen Wert zurück, mit dem man dann überprüfen kann, ob CreateDevice() erfolgreich ausgeführt wurde.
Macht man die Zeigervariable nur aus Faulheitsgründen, um nicht immer z.B. IrrlichtDevice.setWindowCaption(), sonder nur (*device).setWindowCaption() schreiben zu müssen?mfg
Schoasch
-
Schoasch schrieb:
Denn CreateDevice ist doch eine Funktion von der Klasse IrrlichtDevice, ...
HALLOOOO?
Tipp: Lern zuerst mal C++ ...Es tut mir leid, aber darauf fällt mir echt nichts anderes mehr ein. Du weisst anscheinend nicht einmal was eine freie Funktion ist. Kauf dir ein gutes C++ Buch, dort wirst du dann auch in aller Ruhe mit C++ Zeiger vertraut gemacht. Oft werden hier die folgenden zwei Bücher empfohlen:
- C++ Primer
- Thinking in C++ 1&2 (auch gratis als PDF erhältlich, nur Englisch)Alles andere scheint mir echt sinnlos zu sein. Dir fehlen anscheinend jegliche Art von Grundlagen, was C++ betrifft. Anderst kann ich mir deine Aussagen einfach nicht mehr erklären.
Grüssli
-
Du weisst anscheinend nicht einmal was eine freie Funktion ist.
Also das brauchst du mir jetzt aber wirklich nicht vorzuwerfen, zumal ich schon viele Programmiersprachen beherrsche und das selbst in C++ gut beherrsche.
Nur weil ich mich bei diesem Bereich nicht auskenne lass ich mich nicht beleidigen. Außedem besitze ich den C++ Primer, der ist mir aber bei den meisten Stellen zu ausführlich, und das Kapitel der Zeiger habe ich gelesen, wegen den vielen Fachbegriffen aber nicht verstanden (...und nein, ich will jetzt keine dummen Anmachsprüche).
mfg
Schoasch
-
Schoasch schrieb:
Nur weil ich mich bei diesem Bereich nicht auskenne lass ich mich nicht beleidigen.
Dravere meint das nicht böse, aber du solltest wirklich Theorie anschauen, um das Verständnis zu erlangen. Memberfunktionen und freie Funktionen sind eben nicht das Gleiche.
Schoasch schrieb:
Außedem besitze ich den C++ Primer, der ist mir aber bei den meisten Stellen zu ausführlich, und das Kapitel der Zeiger habe ich gelesen, wegen den vielen Fachbegriffen aber nicht verstanden
Hm, welche Fachbegriffe treten denn im Zusammenhang mit Zeigern auf? Mir fällt eigentlich nur gerade "dereferenzieren" ein, und dessen Bedeutung hat man noch schnell einmal begriffen.
Aber vielleicht hilft dir ja dieser Artikel etwas, dort sind Zeiger recht ausführlich erklärt. Und lies vielleicht dein Kapitel im Buch als Ergänzung nochmals, das kann sicher nicht schaden.
-
Schoasch schrieb:
Also das brauchst du mir jetzt aber wirklich nicht vorzuwerfen, zumal ich schon viele Programmiersprachen beherrsche und das selbst in C++ gut beherrsche.
C++ entspricht aber nicht vielen Programmiersprachen, daher bringt es ziemlich wenig, wenn du andere Programmiersprachen beherrschst. Du musst C++ können.
Schoasch schrieb:
Nur weil ich mich bei diesem Bereich nicht auskenne lass ich mich nicht beleidigen.
Ich will dich nicht beleidigen, es ist einfach eine Feststellung. Du hast ein durcheinander von Begriffen und Funktionalitäten. Es scheint, als hättest du nur mal C++ flüchtig angeschaut.
Schoasch schrieb:
Außedem besitze ich den C++ Primer, der ist mir aber bei den meisten Stellen zu ausführlich, und das Kapitel der Zeiger habe ich gelesen, wegen den vielen Fachbegriffen aber nicht verstanden...
Und diese Aussage scheint mir der beste Beweis für meine Annahme zu sein. Er ist dir zu ausführlich, daher hast du wohl Dinge übersprungen und nicht richtig verstanden und bei den Zeiger bist du dann zum Beispiel nicht mehr mitgekommen.
Die Sprache C++ ist sehr mühsam zu lernen und die Grundlagen sollte man ganz genau anschauen und nicht überspringen.
Ich meine, wie zum Geier kommst du darauf, dass
CreateDevicezur KlasseIrrlichtDevicegehören soll? Das entspricht nicht der Syntax von C++ und hat hier auch überhaupt niemand behauptet.
Und auch deine Aussagen danach sind einfach nur ein Durcheinander. Entweder fehlen dir Grundlagen oder du hast unsere Beiträge nicht richtig gelesen.Grüssli
-
Schoasch schrieb:
Also das brauchst du mir jetzt aber wirklich nicht vorzuwerfen, zumal ich schon viele Programmiersprachen beherrsche und das selbst in C++ gut beherrsche.
Nur weil ich mich bei diesem Bereich nicht auskenne lass ich mich nicht beleidigen. ...
Wo er Recht hat, hat er Recht. Wie kommst du z.B. auf die Zugehörigkeit der
Funktion CreateDevice zur Klasse IrrlichtDevice? Das sind C++ Grundlagen. Ich sehe Draveres Beitrag nicht als eine Beleidigung an; aber Recht gebe ich dir: die Wahrheit kann schon ernüchternd und schmerzhaft, sozusagen beleidigend sein.
Und ja, einen leicht piekenden Unterton kann man ihm und den anderen meiner Meinung nach aufgrund der aufgewendeten, jedoch fruchtlosen Mühe nicht verübeln.
-
Schoasch schrieb:
Nur weil ich mich bei diesem Bereich nicht auskenne lass ich mich nicht beleidigen.
Du kennst offensichtlich elementare Sprachelemente nicht, insofern ist es sinnlos dir die darauf aufbauende Konzepte erklären zu wollen. Du wirst sie eh nicht verstehen! Nimm deine Bücher zur Hand und arbeite das nach, und melde dich dann wieder.
P.S. Wer im Glashaus sitzt sollte nicht mit Steinen werfen.