Registrieren | Einloggen
Suche | FAQ


Autor Thema: kleines C++ problem
GXRdrago
Co-Clan Leader
=GXR=
**********
ID # 13



Beiträge: 2217
Mitglied seit: Juni 2003

Erstellt am 23. Februar 2008 23:12 (#1) Zitat E-Mail PN
hi,

mal nen kleines lebenzeichen abgeb :)

da hier, wenn ich mich recht entsinne auch ein paar informatiker rumstreunen, dacht stell ich mal mein problem was ich grad bei meinem hiwi job hab hier rein

hab verschiedene klassen welche den datentyp vhFloat nutzen, jener welche in einer seperaten .H datei folgenerweise definiert ist:

#ifdef __USE_DOUBLE_PRECISION__
#define vhFloat double
#else
#define vhFloat float
#endif

die .H datei wird auch überall eigebunden wo sie benötigt

das problem besteht jetz darin, dass alles wunderbar funktioniert, solange __USE_DOUBLE_PRECISION__ NICHT defniert wird also vhFloat = float ist, wenn ich jetzt aber
#define __USE_DOUBLE_PRECISION__
vor dem einbinden der ganzen header tippe, werden die ganzen klassen trotzem mit vhFloat = float behandelt

kleines bsp:
in der klasse vhAxisAngle gibt es eine funktion set die folgenderweise definiert ist:
void vhAxisAngle::set ( vhFloat x, vhFloat y, vhFloat z, vhFloat angle);


00 #define __USE_DOUBLE_PRECISION__
01 #include "vhAxisAngle.H"
02
03 int main ()
04 {
05 vhFloat x = 1.0, y = 0.0, z = 0.0, angle = 3.14;
06 vhAxisAngle aa;
07
08 aa.set(x, y, z, angle);
09 }

in zeile 08 kommt dann der fehler, dass er float haben will und nicht double

wenn ich statt

#ifdef __USE_DOUBLE_PRECISION__
#define vhFloat double
#else
#define vhFloat float
#endif


einfach nur

#define vhFloat double

mache funktionert allerdings alles

laut google kann das u.U. am compiler liegen und es soll woh auch unterschiede machen (compiler bedingt) ob man

#ifdef __USE_DOUBLE_PRECISION__
#define vhFloat double
#else
#define vhFloat float
#endif

oder

#ifdef __USE_DOUBLE_PRECISION__
typedef double vhFloat ;
#else
typedef float vhFloat ;
#endif

verwendet

hab schon verschiedene versionen von gcc versucht, und auch die #define bzw. typedef versucht, hat jedoch nix geholfen bei mir,

der ganze spass wird benötigt, da die physikengine Newton unter linux z.Z. nur mit float existiert, die selben klassen jedoch an anderer stelle durchaus mit double benötigt werden

ist euch schonmal sowas untergekommen?? bzw. hab ihr ideen??


drago

Wer nicht über die Zukunft nachdenkt, wird keine haben.
=GXR=Stefan
styles/dark.css
=GXR=
******
ID # 241



-339-525-296

Errungenschaften
Beiträge: 615
Mitglied seit: Dezember 2007

Erstellt am 24. Februar 2008 11:45 (#2) Zitat E-Mail PN
Ich würde ja gerne helfen, aber leider kenne ich mich mit C++ nicht aus. Wir machen gerade in der Schule C und die Befehle die du hir benutzt kommen nicht alle in C vor.
NEED FOR SPEED HIGH STAKES :)


-----------------------
Mainboard: ASUS P5N-D
CPU: Intel Core 2 Quad Q9400 4x2,66 GHz
RAM: 4x 2GB DDR 2 800 MHz
Grafik: 1x NVIDIA GEFORCE 260 GTX 896 MB
GXRdrago
Co-Clan Leader
=GXR=
**********
ID # 13



Beiträge: 2217
Mitglied seit: Juni 2003

Erstellt am 25. Februar 2008 12:42 (#3) Zitat E-Mail PN
danke, dass du hier trotzdem mal reingeschaut hast

Wer nicht über die Zukunft nachdenkt, wird keine haben.
=GXR=JimD
styles/style[2].css
=GXR=
******
ID # 11



Beiträge: 1523
Mitglied seit: Juni 2003

Erstellt am 26. Februar 2008 07:33 (#4) Zitat E-Mail PN
Reingeschaut hab ich auch, aber richtig intensiv hab ich mich nie mit C++ beschafft. :rolleyes:
Der Mixer ist ja "Quick & Dirty" in Visual Basic 6 zusammen gebastelt. ;)
=GXR=Silver92
styles/grau.css
=GXR=
******
ID # 244



-495-402-076

Beiträge: 895
Mitglied seit: Februar 2008

Erstellt am 26. Februar 2008 17:22 (#5) Zitat E-Mail PN
nee sorry kenn mich da auch nicht aus aber ich möchts bald mal lernen :)

Porsche Carrera GT <3
Koenigsegg CCXRE <3
GER McCancey
styles/style[2].css
=GXR=
*****
ID # 14



Beiträge: 391
Mitglied seit: Juni 2003

Erstellt am 27. Februar 2008 21:49 (#6) Zitat E-Mail PN
Na, schon ne Lösung gefunden?

Hast du dich hier vertippt?
Zitat von GER drago:


00 #define __USE_DOUBLE_PRECISION__
01 #include "vhAxisAngle.H"
02
03 int main ()
04 {
05 vhFloat x = 1.0, y = 0.0, z = 0.0, angle = 3.14;
06 vhAxisAngle aa;
07
08 aa.set(x, y, z, angle);
09 }

in zeile 08 kommt dann der fehler, dass er float haben will und nicht double
drago


Wenn die Fehlermeldung so lautet wie du schreibst und die Funktion .set float Werte erwartet, dann ist doch alles wie es sein sollte...

Wenn du das Headerfile an mehreren Stellen einbindest, wie du sagst, stellst du auch sicher, dass es nicht mehrfach geladen wird?

#ifndef VH_AXIS_ANGLE
#define VH_AXIS_ANGLE

[definitionen]

#endif
GXRdrago
Co-Clan Leader
=GXR=
**********
ID # 13



Beiträge: 2217
Mitglied seit: Juni 2003

Erstellt am 27. Februar 2008 22:21 (#7) Zitat E-Mail PN
also dieses #ifndef .. #define .. #endif konstrukt hat jedes headerfile, daran dürfte es also nicht liegen

und eine lösung hab ich noch nicht...

derzeitiger stand der dinge ist, dass es wohl 2 versionen der betroffenen klassen geben wird eine mit float und eine mit double...

ist nicht schön, aber wenn sich keine lösung findet..

Wer nicht über die Zukunft nachdenkt, wird keine haben.