Probleme mit Konstruktor + throw
-
Hallo!
Aufgabe ist es einerseits eine Rekursion zu entwickeln die ein Feld sotiert. Die Größe des Feldes möchte ich über den Konstruktor der Klasse bestimmen. Leider kommt hier immer eine Fehlermeldung.
Die andere Aufgabe ist es, auch per Rekursion die Quersumme einer Zahl zu ermitteln und bei einer negativen Zahl ein throw zu machen um ein catch zu aktivieren welches eine Funktion aufruft, auch hier passiert ein Fehler.
Rekursion.h
class Rekursion { private: long *Feld; int n; public: class NegZahl { public: void FehlerAusgeben(); }; Rekursion(int a); void AuswSort(); int QuerSumme(long Eingabe); void Zufallfeld(); long *r_Feld(); };
Rekursion.cpp
#include <iostream.h> #include <stdlib.h> #include "Rekursion.h" Rekursion::Rekursion(int a) { n = a; Feld = new long Feld[a]; // Hier kommt der erste Fehler Zufallfeld(); } long *Rekursion::r_Feld() { return Feld; } void Rekursion::NegZahl::FehlerAusgeben() { cout<<"\nFEHLER"; cout<<"\nBitte eine POSITIVE Zahl eingeben!"; } int Rekursion::QuerSumme(long Eingabe) { // if(Eingabe < 0) throw NegZahl(); // Hier kommt der zweite Fehler int r, z; r = Eingabe % 10; z = Eingabe / 10; if(Eingabe > 9) { return r + QuerSumme(z); } else { return Eingabe; } } void Rekursion::AuswSort() { int i, tausch, xi; tausch = Feld[0]; xi = 0; for(i=0; i<n; i++) { if(Feld[i] < tausch) { tausch = Feld[i]; xi = i; } } Feld[xi] = Feld[0]; Feld[0] = tausch; n = n - 1; if(n > 0) { Feld = Feld + 1; AuswSort(); } } void Rekursion::Zufallfeld() { int i; randomize(); for(i=0; i<n; i++) { Feld[i] = random(1000); } }
HPT.cpp
#include <iostream.h> #include "Rekursion.h" Rekursion R(20); int main(void) { // sotieren cout<<"Feld 1: "<<R.r_Feld()<<endl; R.AuswSort(); cout<<"Feld 2: "<<R.r_Feld()<<endl; // Quersumme long z; while(1) { try { cout<<"Zahl eingeben: "<<endl; cin>>z; cout<<"Quersumme ist: "<<R.QuerSumme(z)<<endl; break; } catch(Rekursion::NegZahl Exception) { Exception.FehlerAusgeben(); } } return 0; getch(); }
Danke schonmal an jeden der sich dafür Zeit nimmt!
Gruß,
Johrtreel
-
Versuchs mal mit folgendem:
Feld = new long[a]; // Feld weglassen
if(Eingabe < 0) throw NegZahl; // mal ohne Klammern
MfG Jester
-
Jester schrieb:
if(Eingabe < 0) throw NegZahl; // mal ohne Klammern
Sicher? Das muss eigentlich mit Klammern. Mich würd zuerst mal interessieren, was da für ein Fehler kommt.
-
ups... ja klar, hast recht!