Class EInvalidOp wirft Exeption "Invalid floating point operation"
-
Ich bin gerade dabei einen Genetischen Algorithmus in C++ zu schreiben. In meinem Programm wird zunächst in der "main" ein Objekt vom Typ TUrChromosom erstellt, in dessen Konstruktor wiederum ein Objekt der Klasse TPopulation erstellt wird, in dessen Konstruktor wiederum die Methode Organisiere Optimierung der Klasse TPopulation aufgerufen wird, in der dann der restliche Algorithmus abläuft.
Dass war jetzt mal grob erklärt wie mein Programm abläuft.
Mein Problem ist im Moment, dass sobald ich einen float Wert über eine get-Methode abfragen will oder einen float Wert einem anderen float Wert zuweisen oder hinzuaddieren will, wird die Exception "Invalid floating point operation" der Klasse EInvalidOp geworfen.
Mir ist allerdings nicht bewusst, dass ich eine ungültige Operation durchgeführt hätte.Hier hab ich nochmal das Codestück in dem die Exception ausgelöst wird.
Das Programm löst die Exception in der Zeile aus wo die getHeight Methode aufgerufen wird.
Falls ihr zum Beantworten meiner Frage das komplette Programm benötigt, kann ich es euch per Email schicken.Vielen Dank für eure Mühen schon mal im Voraus!
void TPopulation :: bewerten() { TEChromosom *tmp; TList *myList; TContainer *packet_x; TContainer *packet_y; int _anzahl_spalten =0; float a_kosten_spalte = 0; float a_kosten = 0; float b_kosten_spalte = 0; float b_kosten = 0; float c_kosten_spalte = 0; float c_kosten = 0; float d_kosten_spalte = 0; float d_kosten = 0; float hoehe_x; float hoehe_y; float gewicht_x; float gewicht_y; float spaltenhoehe; float spaltengewicht; float _fitness; // Durchläuft Liste chrom_pool mit allen existierenden Individuen for( int i = 0; i <= ( ( chrom_pool -> Count )-1 ); i++ ) { // tmp bekommt Referenz auf EntwicklungsChromosom an der Stelle [i] tmp = ( TEChromosom* ) chrom_pool -> Items[i]; spaltengewicht = 0; spaltenhoehe = 0; // myList erhält Referenz auf die Liste (TList) mit den Containern // des Entwicklungs Chromosoms myList = tmp -> getContainerList(); // Durchläuft Liste bestehend aus Elementen der Klasse TContainer for ( int k = 0; k < myList -> Count; k++ ) { // Zugriff auf jeweils 2 Pakete in der Spalte die weiter unten // im Code verglichen werden sollen packet_x = (TContainer*) myList -> Items[k]; packet_y = (TContainer*) myList -> Items[k+1]; cout << "Testausgabe_1"; getch(); // Ermitteln der für die Bewertung relevanten Daten der Pakete hoehe_x = packet_x -> GetHeight(); // Fehler u.a. cout << "Testausgabe_2"; getch(); hoehe_y = packet_y -> GetHeight(); gewicht_x = packet_x -> GetWeight(); gewicht_y = packet_y -> GetWeight(); // Restlicher Code der Methode bewerten....float TContainer::GetHeight( ) { return fHeight; }