Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

1

24.07.2007, 12:15

Problem mit static_cast

[Warning] converting to 'int' from 'float'

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#define c cout <<"\n"<<
using namespace std;


int PH;
char A = 'B';
const int B = 23;
float C = 0.7f;

int main (void)
{
    c "A=" <<A;
    c "B=" <<B;
    c "C=" <<C;
    
    static_cast <float>(PH);
    static_cast <float>(A);
    PH = A/C;/////////////////////////////////

    c "A/C =" <<PH;
    
    static_cast <float>(A);
    PH = A*1.5f;/////////////////////////////

    c "A*1.5f =" <<PH;
    
    static_cast <int> (PH);
    PH = A*(255-A);
    c "A*(255-A) =" <<PH;
    
    cin >>PH;
    return 0;
}


Bei den Zeilen mit den vielen / kommt immer der obige Fehler, wobei ich doch alles in float umgewandelt hab. Wie soll das dann noch int werden?
Als Lösung kommt dann immer:

Quellcode

1
2
3
4
5
6
A=B
B=23
C=0.7
A/C =94
A*1.5f =99
A*(255-A) =12474

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

24.07.2007, 12:19

Versuchs halt mal so wie man casts anwendet:

C-/C++-Quelltext

1
PH = static_cast< float >( A ) / C;
@D13_Dreinig

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

3

24.07.2007, 12:21

Aber warum so rum. Ist das nicht das gleiche?
Der Fehler bleibt.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

24.07.2007, 12:23

Zitat von »"Stier X"«

Aber warum so rum. Ist das nicht das gleiche?


Nö, oder sieht das für dich etwas gleich aus?
@D13_Dreinig

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

5

24.07.2007, 12:23

Re: Problem mit static_cast

Zitat von »"Stier X"«


C-/C++-Quelltext

1
2
3
4
    static_cast <float>(PH);
    static_cast <float>(A);
    static_cast <float>(A);
    static_cast <int> (PH);


Die Zeilen haben gar keinen Effekt, weil die casts den neuen Wert zurückgeben, aber nicht in die Variable schreiben (wozu auch, die hat ja nach wie vor den alten Typen). Du müsstest also sowas machen:

C-/C++-Quelltext

1
float AFloat = static_cast <float>(A);


Das ist aber immer noch nicht richtig, denn der Fehler lautet ja convertierung from float to int, nicht umgekehrt, was du eigentlich machen willst ist:

C-/C++-Quelltext

1
PH = static_cast<int>(A*1.5f);

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

6

24.07.2007, 12:26

Zitat von »"David_pb"«

Zitat von »"Stier X"«

Aber warum so rum. Ist das nicht das gleiche?


Nö, oder sieht das für dich etwas gleich aus?

Es sieht zwar nicht gleich aus, aber es macht das gleiche. ob ich das vorher oder währenddessen mach ist doch egal.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

7

24.07.2007, 12:27

macht es eben nicht! casts haben einen rückgabewert.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

24.07.2007, 12:30

Zitat von »"Stier X"«

Zitat von »"David_pb"«

Zitat von »"Stier X"«

Aber warum so rum. Ist das nicht das gleiche?


Nö, oder sieht das für dich etwas gleich aus?

Es sieht zwar nicht gleich aus, aber es macht das gleiche. ob ich das vorher oder währenddessen mach ist doch egal.


Dir fehlen wohl noch ein paar Grundlagen! :-) static_cast< T >( x ) ändert nicht den Typ von x sondern gibt ein Objekt vom Typ T zurück. Daher benötigst du eine Zuweisung oder du musst den Rückgabewert sofort verwenden.
@D13_Dreinig

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

9

24.07.2007, 12:31

Bei deiner Version kommt der Fehler aber auch.

Wie meinst du das jetzt. Es ist nicht egal, ob ich das in ein oder zwi zeilen aufteil? edit: damn, also das war mein fehler. Hab gerade nochmal aufs bsp. geschaut. Aber so funktioniert das auch nicht.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

10

24.07.2007, 12:35

jetzt liest du mal in aller ruhe was hier geschrieben steht, dann machst du dir ein paar gedanken und wenn dann immer noch was unklar ist frag nochmal...

david hat dir die falsche zeile hingeschrieben, weil du beim abtippen der warnung die ausdrücke float und int umgedreht hast (wenn auch sinngemäß)

in meinen beiträgen steht doch alles was du wissen musst...

Werbeanzeige