Erklärung eines kleinen Codebeispiels...
-
DerAnfänger2005 schrieb:
Mir persönlich gefällt die gecastete Methode besser...nur wie gesagt gehts so net... Habt dz/ihr noch Ideen?
Ja, so gehts nicht. Die Deklaration und Definition deiner Methode ist richtig, aber deine Verwendung und Zuweisung nicht.
DerAnfänger2005 schrieb:
Irgendwann später:
int color[3]; color = ( (int[])EineInstanz->getFeld() ); //Hier Fehler!
Und zwar sagt er:
-error: ISO C++ forbids casting to an array type 'int[]'
-error: incompatible types in assignement of 'int*' to 'int[3]'Da meckert er natürlich rum!
Wenn du deine Werte in das Array color[] kopieren willst, dann musst du meine erste Variante mit dem Parameter (ohne cast) verwenden. Wenn du es mit Zeiger und cast machen willst, dann muss das ganze so aussehen:int * color; ... color = EineInstanz->getFeld();
DerAnfänger2005 schrieb:
Das Leben ist so ungerecht....Es könnte alles soooo einfach sein
Du sagst es... (manchmal ist es aber auch einfacher als man denkt ;))
-
Wenn du deine Werte in das Array color[] kopieren willst, dann musst du meine erste Variante mit dem Parameter (ohne cast) verwenden.
Also die memcpy() Sache... hmmm
Wenns denn unbedingt sein muss... (In Delphi geht sowas irgendwie...flüssiger
)
-
Du kannst es aber auch mit int * color probieren. Wäre auf jeden Fall weniger Speicherintensiv (wobei das bei 3 Elementen noch relativ egal ist).
-
Ich sollte vielleicht noch erwähnen, dass das Color beschaffen relativ zeitkritisch ist.
Wenn ich 100 OpenGL Objekte habe und für jedes die Farbe hohlen muss, wärs schon schön, wenns flott ginge. Wie schnell ist den memcpy in dieser Hinsicht?
-
AJ schrieb:
Du kannst es aber auch mit int * color probieren. Wäre auf jeden Fall weniger Speicherintensiv (wobei das bei 3 Elementen noch relativ egal ist).
Hmmm...eigentlich könnte das funktionieren... Man kann halt nur nicht so konfortabel auf die Elemente zugreifen...
-
DerAnfänger2005 schrieb:
AJ schrieb:
Du kannst es aber auch mit int * color probieren. Wäre auf jeden Fall weniger Speicherintensiv (wobei das bei 3 Elementen noch relativ egal ist).
Hmmm...eigentlich könnte das funktionieren... Man kann halt nur nicht so konfortabel auf die Elemente zugreifen...
Sicher?
Probiers hald mal aus:
... int arr[3] = { 1, 3, 5 }; int * ptr = arr; printf("%i = %i", arr[1], ptr[1]); // oder cout << arr[1] << " = " << ptr[1]; ...
DerAnfänger2005 schrieb:
Ich sollte vielleicht noch erwähnen, dass das Color beschaffen relativ zeitkritisch ist.
Wenn ich 100 OpenGL Objekte habe und für jedes die Farbe hohlen muss, wärs schon schön, wenns flott ginge. Wie schnell ist den memcpy in dieser Hinsicht?
Wenn es zeitkritisch ist, dann solltest du so wenig wie möglich kopieren. memcpy() dürfte eine der schnellsten Varianten sein etwas von einem Speicherbereich zum anderen zu kopieren.
-
Habs ausprobiert und geht wie ich es mir vorgestellt habe.
Danke! Du hast mir sehr geholfen.
-
So...ich hab nochmal ne Frage:
Ich bekomme ja jetzt den Pointer auf mein Feld. Jetzt möchte ich gerne Daten auslesen, aber irgendwie scheiter ich da:
(Sender->getColor())[0] == 0.7)
und
Sender->getColor()[0] == 0.7)
scheinen beide nicht richtig zu sein.
Wie gehts richtig?
-
Könnte einer von euch mein Flehen erhören und eine Lösung sagen? Ich steh immer noch aufm schlauch...
-
Ich hab das
GLflaot color[3]; GLfloat* getColor() {return (GLfloat*)color;};
Mit
( (GLfloat)Sender->getColor() )[0] == 0.7
bekomme ich
error: ISO C++ forbids casting to an array type 'GLfloat[]'
Och menno...ich will doch nur testen, ob der x-te Wert im Feld gleich irgendwas ist...