Aktuelle Zeit: 22.12.2024, 20:42

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: aabox zu void* und wieder zurück
BeitragVerfasst: 01.11.2008, 23:19 
Offline
Benutzeravatar

Registriert: 17.02.2008, 14:08
Beiträge: 125
Code:
void *Value = &core::aabbox3d<f32>(0,0,0,1,1,1);

core::aabbox3d<f32> *box = (core::aabbox3d<f32>*)Value;

driver->draw3DBox(*box,video::SColor(255,255,0,0));


Leider wird überhaupt nichts gezeichnet. Wenn ich aber schreibe:
Code:
driver->draw3DBox(core::aabbox3d<f32>(0,0,0,1,1,1),video::SColor(255,255,0,0));


Dann klappt es. Also muss es wohl irgendwo in der Konvertierung hängen. Frage ist jetzt wie sich das beheben lässt?

MfG
FTC

_________________
Cold-Death
Magnon


Nach oben
 Profil  
 
BeitragVerfasst: 01.11.2008, 23:50 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
einer der vielen Gründe, warum void* böse ist ;)

Code:
core::aabbox3df box(0,0,0,1,1,1);
void *Value = &box;

core::aabbox3d<f32> *box = (core::aabbox3d<f32>*)Value;

driver->draw3DBox(*box,video::SColor(255,255,0,0));


box darf natürlich nicht aus dem scope verschwinden

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
BeitragVerfasst: 02.11.2008, 13:26 
Offline
Benutzeravatar

Registriert: 17.02.2008, 14:08
Beiträge: 125
Hm das hat mir jetzt bedingt weitergeholfen, also wenn ich es so direkt hintereinander in die Drawfunktion meiner Klasse schreibe geht es:
Code:
    core::aabbox3d<f32> box1(0,0,0,1,1,1);
    compareValue = &box1;
    core::aabbox3d<f32> *box = (core::aabbox3d<f32>*)compareValue;
    driver->draw3DBox(*box,video::SColor(255,255,0,0));



Wenn ich aber
Code:
    core::aabbox3d<f32> box1(0,0,0,1,1,1);
    compareValue = &box1;

in den Constructor und
Code:
    core::aabbox3d<f32> *box = (core::aabbox3d<f32>*)compareValue;
    driver->draw3DBox(*box,video::SColor(255,255,0,0));

in die Drawfunktion schreibe, wird wieder nichts gezeichnet...

compareValue ist dabei ein void Pointer und Attribut der Klasse.

Der Voidpointer geht also irgendwie irgendwo verloren, obwohl ich nach dem initialisieren nichtmehr darauf zugreife.

MfG
FTC

_________________
Cold-Death
Magnon


Nach oben
 Profil  
 
BeitragVerfasst: 02.11.2008, 14:02 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Ich sag ja: box darf nicht aus dem scope verschwinden, weil es sonst zerstört wird.

Vielleicht mit
Code:
core::aabbox3df* box = new aabbox3df();
compareValue = (void*)box;

...

delete compareValue;


Warum überhaupt mit void* ?

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
BeitragVerfasst: 02.11.2008, 15:41 
Offline
Benutzeravatar

Registriert: 17.02.2008, 14:08
Beiträge: 125
Öh, aber wenn ich delete benutze ist es doch erst recht weg oder?

Ich wollte void* benutzen um von einer Oberklasse ein Wertattribut zu übergeben das entsprechend zu der erbenden Klasse passt, also zb int, float oder eben eine box sein kann.

Aber ich glaube ich mach es anders, das hier scheint irgendwie zu langwierig zu werden ^^ Ich werde einfach das Attribut in den erbenden Klassen anpassen und nur die Übergabefunktionen vererben.

MfG
FTC

_________________
Cold-Death
Magnon


Nach oben
 Profil  
 
BeitragVerfasst: 02.11.2008, 16:09 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Das delete war für den destruktor ^^

Eigentlich kann man sich grundsätzlich folgendes merken:
Wenn man an einem Punkt angekommen ist, an dem man ein void* braucht, sollte man sich erstmal überlegen, ob man nicht irgendwo irgendwas besser machen ^^

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de