2017-02-27 3 views
-3

Hallo, ich bin ein C++ Anfänger und ich kann wirklich meinen Kopf um diesen Fehler Umwandlung von 'double' zu 'int' erfordert eine Verengung Umwandlung das ist meine Code; #include "Segment.h" mit Namespace imat1206;Konvertierung von 'Double' zu 'Int' erfordert eine Verengung Umwandlung

Segment::Segment(int new_speed_limit 
, int new_end, double new_length, double new_deceleration) 
:the_speed_limit{ new_speed_limit } 
, the_end{ new_end } 
, the_length{ new_length } 
, deceleration{ new_deceleration } 


{} 

Segment::Segment(double new_end, double new_acceleration) 
    :the_end{ new_end } 
    , acceleration{ new_acceleration } 

{} error here 
double Segment::to_real() const { 
return static_cast<double>((the_end)*(the_end)/(2 * (the_length))); 
while (acceleration) 
{ 
    (acceleration >= 0); 
     return static_cast<double> ((the_end) /(1 * (acceleration))); 
} 
} 

bitte jemand helfen dank
der Fehler Ich erhalte ist: error C2397: Umwandlung von ‚double‘ auf ‚int‘ erfordert eine Verengung Umwandlung

+0

Geben Sie an, welche Linie den Fehler verursacht. –

+2

Sie müssen in diesem Fall ein eigenes [mcve] einschließen, einschließlich der mit dieser Klasse verknüpften .h-Datei. Aus dem Kontext, in dem der Fehler auftritt, ist nicht klar. – Xirema

+0

@NeilButterworth danke ich tat – yoyooyoyo

Antwort

0

The error durch Ihre Umwandlung eines double verursacht wird, int im zweiten Konstruktor. Aus dem Zusammenhang Ihres Codes würde ich annehmen, dass the_end als int definiert ist, aber Sie es eine double zuweisen.

Segment::Segment(double new_end, double new_acceleration) 
    : the_end{ new_end },    // <-- Here 
    acceleration{ new_acceleration } 
{ 

} 

Ihre Verwendung einer Initialisierungsliste insbesondere verursacht den Fehler, wie sie do not allow for narrowing.

Besonders hervorzuheben für Ihre Situation:

  • Ein Floating-Point-Wert kann nicht in einen Integer-Typ umgewandelt werden.

den Fehler zu beheben, bieten einfach eine explizite Umwandlung:

Segment::Segment(double new_end, double new_acceleration) 
    : the_end{ static_cast<int>(new_end) }, 
    acceleration{ new_acceleration } 
{ 

} 

Note natürlich auf eine double (integer Verkürzung, die möglichen Gefahren Sie aus gehen von Datenverlustpotenzial aus einer int von Gießen aus 8 Bytes bis 4 Bytes usw.).

Verwandte Themen