c++ fragen zu methoden/funktionen
c++ fragen zu methoden/funktionen
Hallo zusammen,
wie immer gibt es fragen die nur Fachleute beantworten könne.
Mein gröstes problem scheint beim verstehen der von mir abverlangten parameter zu sein.
Egal ob bei Qt, SDL2, GLSL usw. immer stoße ich an sachen die ich nicht richtig verstehe.
bsp.
https://doc.qt.io/qt-5/qchart.html
QChart(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags())
1# QGraphicsItem *parent = nullptr
2# Qt::WindowFlags wFlags = Qt::WindowFlags()
Da ich lesen kann verstehe ich das ich bei 1# ein QGraphicsItem zeiger auf nullptr habe
wenn ich diese funktion jetzt aber nutzen möchte fällt es mir schwer nachzuvollziehen wie und was ich da einfüge
Bei 2# übergebe ich ein Flag oder so . . . .
So geht es mir mit fast allen frameworks, bibliotheken.
Meine frage ist jetzt, gibt es lektüren oder eine möglichkeit das besser zu verstehen als die dokumentation die nicht mehr sagt das diese funktion parameter x,y braucht.
bzw. wie kann ich das besser lernen (Tips,Eselbrücke, rückwärts denken usw... würde alles helfen wenn ich wüsste wie )?
Danke im voraus
wie immer gibt es fragen die nur Fachleute beantworten könne.
Mein gröstes problem scheint beim verstehen der von mir abverlangten parameter zu sein.
Egal ob bei Qt, SDL2, GLSL usw. immer stoße ich an sachen die ich nicht richtig verstehe.
bsp.
https://doc.qt.io/qt-5/qchart.html
QChart(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags())
1# QGraphicsItem *parent = nullptr
2# Qt::WindowFlags wFlags = Qt::WindowFlags()
Da ich lesen kann verstehe ich das ich bei 1# ein QGraphicsItem zeiger auf nullptr habe
wenn ich diese funktion jetzt aber nutzen möchte fällt es mir schwer nachzuvollziehen wie und was ich da einfüge
Bei 2# übergebe ich ein Flag oder so . . . .
So geht es mir mit fast allen frameworks, bibliotheken.
Meine frage ist jetzt, gibt es lektüren oder eine möglichkeit das besser zu verstehen als die dokumentation die nicht mehr sagt das diese funktion parameter x,y braucht.
bzw. wie kann ich das besser lernen (Tips,Eselbrücke, rückwärts denken usw... würde alles helfen wenn ich wüsste wie )?
Danke im voraus
Re: c++ fragen zu methoden/funktionen
Sorry wenn ich das so sage, aber dir scheinen noch viele elementare Grundlagen der Programmierung zu fehlen.
Kauf dir ein Buch zur Sprache, es wird nicht das letzte sein das du zum Thema kaufst, und lese es auch mindestens 3/4 durch. Deutschsprachig für C++ scheint dieses https://www.amazon.de/Das-umfassende-Ha ... 836243601/ ganz brauchbar und aktuell zu sein. Ich habe aber jetzt nur mal schnell das Inhaltsverzeichnis gelesen.
Zu deinem Beispiel:
Tolle Funktion zum addieren von 6 Werten, nicht wahr? Kann man so nutzen:
Blöd ist nur, das ich immer alle 6 Werte angeben muss, auch wenn ich nur 2 Werte addieren möchte:
Das nervt. C++ hat dafür aber mehrere Lösungen. Ich zeige nur zwei.
1. Ich kann die gleiche Funktion mehrfach, aber mit unterschiedlichen Parametern haben:
Jetzt kann ich auch einfach 2 zahlen addieren:
Für den Benutzer der Funktion schonmal nett, aber für den Entwickler immer noch aufwändig.
2. Ich kann aber auch Standardwerte für die Parameter angeben:
Diese Funktion verlangt jetzt nur 2 Parameter, kann aber 6 Parameter verarbeiten. Gebe ich weniger als 6 Parameter an, werden die anderen mit 0 initialisiert.
Genau das ist bei QChart auch der Fall. Du kannst einen parent angeben, musst es aber nicht und wenn du es nicht tust, dann ist der parent automatisch null (nullptr).
MfG
- Hilefoks
Kauf dir ein Buch zur Sprache, es wird nicht das letzte sein das du zum Thema kaufst, und lese es auch mindestens 3/4 durch. Deutschsprachig für C++ scheint dieses https://www.amazon.de/Das-umfassende-Ha ... 836243601/ ganz brauchbar und aktuell zu sein. Ich habe aber jetzt nur mal schnell das Inhaltsverzeichnis gelesen.
Zu deinem Beispiel:
Code: Alles auswählen
int addiere(int a, int b, int c, int d, int e, int f)
{
return a + b + c + d + e + f;
}
Code: Alles auswählen
int ergebnis = addiere(1,2,3,4,5,6);
Code: Alles auswählen
int ergebnis = addiere(1,2,0,0,0,0);
1. Ich kann die gleiche Funktion mehrfach, aber mit unterschiedlichen Parametern haben:
Code: Alles auswählen
int addiere(int a, int b) { return a + b; }
int addiere(int a, int b, int c) { return a + b + c; }
int addiere(int a, int b, int c, int d) { return a + b + c + d; }
int addiere(int a, int b, int c, int d, int e) { return a + b + c + d + e; }
int addiere(int a, int b, int c, int d, int e, int f) { return a + b + c + d + e + f; }
Code: Alles auswählen
int ergebnis = addiere(1,2);
2. Ich kann aber auch Standardwerte für die Parameter angeben:
Code: Alles auswählen
int addiere(int a, int b, int c = 0, int d = 0, int e = 0, int f = 0)
{
return a + b + c + d + e + f;
}
Genau das ist bei QChart auch der Fall. Du kannst einen parent angeben, musst es aber nicht und wenn du es nicht tust, dann ist der parent automatisch null (nullptr).
MfG
- Hilefoks
Re: c++ fragen zu methoden/funktionen
Oft ist es hilfreich den Kontext zu verstehen. Entweder man sucht sich dann entsprechende Bücher, die imho diesen vermitteln sollten, oder man Fragt in unser Zeit in Foren oder beim Support nach.
Bezüglich des Parameters Parent findest du hier eine gute Beschreibung:
https://doc.qt.io/archives/qt-4.8/objecttrees.html
Bezüglich des Parameters Flags findest du unter der entsprechenden Doku auch ein wenig Beschreibung:
https://doc.qt.io/qt-5/qt.html#WindowType-enum
Bei diesem Parameter handelt es sich um Teilweise um Betriebsystemspezfische Funktionen die man sicherlich nicht alle Brauchen wird, wenn überhaupt.
In solch einem Fall lohnt es sich auch mal explizit nach Beispielen zu suchen
(zB. https://doc.qt.io/qt-5/qtwidgets-widget ... ample.html), und mit diesen zu "spielen".
Bezüglich des Parameters Parent findest du hier eine gute Beschreibung:
https://doc.qt.io/archives/qt-4.8/objecttrees.html
Bezüglich des Parameters Flags findest du unter der entsprechenden Doku auch ein wenig Beschreibung:
https://doc.qt.io/qt-5/qt.html#WindowType-enum
Bei diesem Parameter handelt es sich um Teilweise um Betriebsystemspezfische Funktionen die man sicherlich nicht alle Brauchen wird, wenn überhaupt.
In solch einem Fall lohnt es sich auch mal explizit nach Beispielen zu suchen
(zB. https://doc.qt.io/qt-5/qtwidgets-widget ... ample.html), und mit diesen zu "spielen".
Re: c++ fragen zu methoden/funktionen
Danke für deine Antwort !hilefoks hat geschrieben: ↑19. Februar 2019 20:14 Sorry wenn ich das so sage, aber dir scheinen noch viele elementare Grundlagen der Programmierung zu fehlen.
Kauf dir ein Buch zur Sprache, es wird nicht das letzte sein das du zum Thema kaufst, und lese es auch mindestens 3/4 durch. Deutschsprachig für C++ scheint dieses https://www.amazon.de/Das-umfassende-Ha ... 836243601/ ganz brauchbar und aktuell zu sein. Ich habe aber jetzt nur mal schnell das Inhaltsverzeichnis gelesen.
Zu deinem Beispiel:Tolle Funktion zum addieren von 6 Werten, nicht wahr? Kann man so nutzen:Code: Alles auswählen
int addiere(int a, int b, int c, int d, int e, int f) { return a + b + c + d + e + f; }
Blöd ist nur, das ich immer alle 6 Werte angeben muss, auch wenn ich nur 2 Werte addieren möchte:Code: Alles auswählen
int ergebnis = addiere(1,2,3,4,5,6);
Das nervt. C++ hat dafür aber mehrere Lösungen. Ich zeige nur zwei.Code: Alles auswählen
int ergebnis = addiere(1,2,0,0,0,0);
1. Ich kann die gleiche Funktion mehrfach, aber mit unterschiedlichen Parametern haben:Jetzt kann ich auch einfach 2 zahlen addieren:Code: Alles auswählen
int addiere(int a, int b) { return a + b; } int addiere(int a, int b, int c) { return a + b + c; } int addiere(int a, int b, int c, int d) { return a + b + c + d; } int addiere(int a, int b, int c, int d, int e) { return a + b + c + d + e; } int addiere(int a, int b, int c, int d, int e, int f) { return a + b + c + d + e + f; }
Für den Benutzer der Funktion schonmal nett, aber für den Entwickler immer noch aufwändig.Code: Alles auswählen
int ergebnis = addiere(1,2);
2. Ich kann aber auch Standardwerte für die Parameter angeben:Diese Funktion verlangt jetzt nur 2 Parameter, kann aber 6 Parameter verarbeiten. Gebe ich weniger als 6 Parameter an, werden die anderen mit 0 initialisiert.Code: Alles auswählen
int addiere(int a, int b, int c = 0, int d = 0, int e = 0, int f = 0) { return a + b + c + d + e + f; }
Genau das ist bei QChart auch der Fall. Du kannst einen parent angeben, musst es aber nicht und wenn du es nicht tust, dann ist der parent automatisch null (nullptr).
MfG
- Hilefoks
Die Grundlagen sind mir schon sehr bekannt.
Vieleicht habe ich auch mich nicht richtig ausgedrückt.
Die von Dir beschriebene sachen sind für mich mehr als verständlich.
Ich vermute das mein problem eher im verstehen von parametern aus anderen bibliotheken liegt.
bsp.
ich versuche mich gerade in GLSL
https://www.khronos.org/opengl/wiki/Shader_Compilation
die erste funktion glVertexAttribPointer() zeigt wie es richtig ist.
die zweite habe ich blanko angelegt damit mir visual studio zeig was die funktion erwartet.
GLuint index = ein unsignt int index
GLint size = int größe
GLenum type = enum type
ab hier wirds schon nerfig:
GLboolean normalized = bool // was zum teufel bedeutet normalized?
GLsizei stride = sizeof // was meinen die mit stride?
hier ist es dann speziel:
const void* pointer = mir ist hier klar konstanter void zeiger (ein zeiger für alle variablen der sich nicht verändert)
aber wie finde ich heraus das ich das als (void*)offsetof(....) übergebe
Und meine Frage hier ist wie kann ich das was da verlangt wird, besser herausfinden.
Gibt es irgend wie eine Tip oder Trick indem ich das besser lerne.
Freue mich auf Eure anregungen
Re: c++ fragen zu methoden/funktionen
Danke für deine Antwort !veeman hat geschrieben: ↑19. Februar 2019 21:03 Oft ist es hilfreich den Kontext zu verstehen. Entweder man sucht sich dann entsprechende Bücher, die imho diesen vermitteln sollten, oder man Fragt in unser Zeit in Foren oder beim Support nach.
Bezüglich des Parameters Parent findest du hier eine gute Beschreibung:
https://doc.qt.io/archives/qt-4.8/objecttrees.html
Bezüglich des Parameters Flags findest du unter der entsprechenden Doku auch ein wenig Beschreibung:
https://doc.qt.io/qt-5/qt.html#WindowType-enum
Bei diesem Parameter handelt es sich um Teilweise um Betriebsystemspezfische Funktionen die man sicherlich nicht alle Brauchen wird, wenn überhaupt.
In solch einem Fall lohnt es sich auch mal explizit nach Beispielen zu suchen
(zB. https://doc.qt.io/qt-5/qtwidgets-widget ... ample.html), und mit diesen zu "spielen".
Re: c++ fragen zu methoden/funktionen
Als nicht OpenGL und/oder Shader Experte hätte ich schon bei den ersten drei Parametern drei Fragezeichen?Djago hat geschrieben: ↑20. Februar 2019 08:52 die erste funktion glVertexAttribPointer() zeigt wie es richtig ist.
die zweite habe ich blanko angelegt damit mir visual studio zeig was die funktion erwartet.
GLuint index = ein unsignt int index
GLint size = int größe
GLenum type = enum type
ab hier wirds schon nerfig:
GLboolean normalized = bool // was zum teufel bedeutet normalized?
GLsizei stride = sizeof // was meinen die mit stride?
Für was braucht die Funktion Index, Size oder Type und wie sietht da der Wertebereich aus???
Nach einer kurzen Websuche erhalte ich:
Zumindest weiß man jetzt was der Wertebereich von size und type ist... was nun für index eingesetzt werden soll weiß ich immer noch nicht; mir fehlt der Context.index
Specifies the index of the generic vertex attribute to be modified.
size
Specifies the number of components per generic vertex attribute. Must be 1, 2, 3, 4. Additionally, the symbolic constant GL_BGRA is accepted by glVertexAttribPointer. The initial value is 4.
type
Specifies the data type of each component in the array. The symbolic constants GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, and GL_UNSIGNED_INT are accepted by glVertexAttribPointer and glVertexAttribIPointer. Additionally GL_HALF_FLOAT, GL_FLOAT, GL_DOUBLE, GL_FIXED, GL_INT_2_10_10_10_REV, GL_UNSIGNED_INT_2_10_10_10_REV and GL_UNSIGNED_INT_10F_11F_11F_REV are accepted by glVertexAttribPointer. GL_DOUBLE is also accepted by glVertexAttribLPointer and is the only token accepted by the type parameter for that function. The initial value is GL_FLOAT.
Nach einer Websuche für "glVertexAttribPointer example" findet man auch ein relativ einfaches Beispiel:
Code: Alles auswählen
glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID);
glEnableVertexAttribArray(0); // We like submitting vertices on stream 0 for no special reason
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(MyVertex), BUFFER_OFFSET(0)); // The starting point of the VBO, for the vertices
glEnableVertexAttribArray(1); // We like submitting normals on stream 1 for no special reason
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(MyVertex), BUFFER_OFFSET(12)); // The starting point of normals, 12 bytes away
glEnableVertexAttribArray(2); // We like submitting texcoords on stream 2 for no special reason
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(MyVertex), BUFFER_OFFSET(24)); // The starting point of texcoords, 24 bytes away
Da stell sich nun nochmal die Frage welchen Wertebereich nun index Anehmen kann; dieser hat offensichtlich in glEnableVertexAttribArray und glVertexAttribPointer den selben Wertebereich.
Eine Websuche nach glEnableVertexAttribArray ergibt:
Auf der selben Seite findet man dann auch raus dass man den Wert durch einen Aufruf von "glGet" und dem Parameter "GL_MAX_VERTEX_ATTRIBS" rankommt.GL_INVALID_VALUE wird generiert, wenn index größer oder gleich GL_MAX_VERTEX_ATTRIBS ist.
Außerdem entnehme ich dem Beispiel, dass size entsprechend der obigen Verwendung auf eine 2D oder 3D Koordinate zielt und der dritte Parameter entsprechend den verwendeten Datentyp darstellt, in demm Fall immer float.
Jetzt wäre sicherlich interessant wann man 1 oder 4 verwendet....
Das Spiel kann man nun mit allen Parametern weiter treiben.
Die Frage ist dann inwiefern man an alle Infos die man wissen möchte auch kommt.
Sollte man die gwünschten Infos nicht finden, muss man entsprechende Foren oder Support Dienste aufsuchen.
Bücher sind sicherlich auch Sinnvoll, aber du wirst wohl im vorfeld nicht wissen ob das jeweilige Buch die gwünschten Informationen beinhaltet.
Re: c++ fragen zu methoden/funktionen
Erstmal danke das Du dir Zeit genommen hast.veeman hat geschrieben: ↑20. Februar 2019 10:48Als nicht OpenGL und/oder Shader Experte hätte ich schon bei den ersten drei Parametern drei Fragezeichen?Djago hat geschrieben: ↑20. Februar 2019 08:52 die erste funktion glVertexAttribPointer() zeigt wie es richtig ist.
die zweite habe ich blanko angelegt damit mir visual studio zeig was die funktion erwartet.
GLuint index = ein unsignt int index
GLint size = int größe
GLenum type = enum type
ab hier wirds schon nerfig:
GLboolean normalized = bool // was zum teufel bedeutet normalized?
GLsizei stride = sizeof // was meinen die mit stride?
Für was braucht die Funktion Index, Size oder Type und wie sietht da der Wertebereich aus???
Nach einer kurzen Websuche erhalte ich:Zumindest weiß man jetzt was der Wertebereich von size und type ist... was nun für index eingesetzt werden soll weiß ich immer noch nicht; mir fehlt der Context.index
Specifies the index of the generic vertex attribute to be modified.
size
Specifies the number of components per generic vertex attribute. Must be 1, 2, 3, 4. Additionally, the symbolic constant GL_BGRA is accepted by glVertexAttribPointer. The initial value is 4.
type
Specifies the data type of each component in the array. The symbolic constants GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, and GL_UNSIGNED_INT are accepted by glVertexAttribPointer and glVertexAttribIPointer. Additionally GL_HALF_FLOAT, GL_FLOAT, GL_DOUBLE, GL_FIXED, GL_INT_2_10_10_10_REV, GL_UNSIGNED_INT_2_10_10_10_REV and GL_UNSIGNED_INT_10F_11F_11F_REV are accepted by glVertexAttribPointer. GL_DOUBLE is also accepted by glVertexAttribLPointer and is the only token accepted by the type parameter for that function. The initial value is GL_FLOAT.
Nach einer Websuche für "glVertexAttribPointer example" findet man auch ein relativ einfaches Beispiel:Daraus schliesse ich, dass vor der verwendung der Funktion glVertexAttribPointer ich zumindest ein glEnableVertexAttribArray tätigen muss.Code: Alles auswählen
glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID); glEnableVertexAttribArray(0); // We like submitting vertices on stream 0 for no special reason glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(MyVertex), BUFFER_OFFSET(0)); // The starting point of the VBO, for the vertices glEnableVertexAttribArray(1); // We like submitting normals on stream 1 for no special reason glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(MyVertex), BUFFER_OFFSET(12)); // The starting point of normals, 12 bytes away glEnableVertexAttribArray(2); // We like submitting texcoords on stream 2 for no special reason glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(MyVertex), BUFFER_OFFSET(24)); // The starting point of texcoords, 24 bytes away
Da stell sich nun nochmal die Frage welchen Wertebereich nun index Anehmen kann; dieser hat offensichtlich in glEnableVertexAttribArray und glVertexAttribPointer den selben Wertebereich.
Eine Websuche nach glEnableVertexAttribArray ergibt:Auf der selben Seite findet man dann auch raus dass man den Wert durch einen Aufruf von "glGet" und dem Parameter "GL_MAX_VERTEX_ATTRIBS" rankommt.GL_INVALID_VALUE wird generiert, wenn index größer oder gleich GL_MAX_VERTEX_ATTRIBS ist.
Außerdem entnehme ich dem Beispiel, dass size entsprechend der obigen Verwendung auf eine 2D oder 3D Koordinate zielt und der dritte Parameter entsprechend den verwendeten Datentyp darstellt, in demm Fall immer float.
Jetzt wäre sicherlich interessant wann man 1 oder 4 verwendet....
Das Spiel kann man nun mit allen Parametern weiter treiben.
Die Frage ist dann inwiefern man an alle Infos die man wissen möchte auch kommt.
Sollte man die gwünschten Infos nicht finden, muss man entsprechende Foren oder Support Dienste aufsuchen.
Bücher sind sicherlich auch Sinnvoll, aber du wirst wohl im vorfeld nicht wissen ob das jeweilige Buch die gwünschten Informationen beinhaltet.
Ich habe auch zwischenzeitlich mit einem unserer Delphi entwickler gesprochen.
Die Antwort vom Entwickler war auch "schau dir die Definition / Deklaration an"
Er hat mir auch erklärt das es meistens hilft zu suchen
Aber wir kommen immer näher, google, bücher usw. ist alles kein problem.
Die frage ich ich nach wie vor habe ist -> gibt es einen Trick genau solche sachen besser zu verstehen/lernen.
btw. die deutsche erklärung habe ich dann bei Delphi gefunden
https://wiki.delphigl.com/index.php/glV ... ribPointer
Und nochmal danke