Probleme mit Primzhalenklasse und Valarray
-
Also ich bin am schreiben einer Klasse zur Berechnung für Primzahlen
Allerdings stellt sich mir ein Problem, nämlich:
Wenn ich das Programm kompiliere und ausführe zeigt mir der Compiler(Dev C++) keinen Codefehler an, das Programm läuft an, stürzt ab, und in der Console steht:"Process exited wit return value of 3221225477.
Ich bin am verzweifeln, da ich jetzt schon die 8 version neuschreibe und nicht draufkomme was das Problem ist.
Die Speicherung der Primzahlen ist über ein Valarray realisiert
Ich bitte im Hilfe, Hier der Code://Programmprimzahlen #include <iostream> #include <fstream> #include <valarray> #include <conio.h> #include <cmath> using namespace std; class prime //Deklariert die Klasse { public: valarray<int> primearray; //initialisiert das Valarray, in dem die Primzahlen abgespeichert werden void primeb(int n); }; void prime::primeb(int n)//Programm zur Berechnung der Primzahlen { int arraycounter; int j=0; int i=0; primearray[0]=2; arraycounter=1; for(i =3; i<= n; i++)//Primzahlen starten bei 3 { for(j=2; j<i; j++) { if(i%j==0) break; } if (i==j) { primearray[arraycounter]=i; //Primearray wird befüllt arraycounter++; //Arraycounter wird um eins erhöht für die nächste Zahl; } } } int main() { prime first; first.primeb(100); // Das objekt first der Klasse prime wird mit Zahlen befüllt return 0; }
-
raubkatz366 schrieb:
das Programm läuft an, stürzt ab, und in der Console steht:"Process exited wit return value of 3221225477.
Ich bin am verzweifeln, da ich jetzt schon die 8 version neuschreibe und nicht draufkomme was das Problem ist.Wie groß ist denn Dein
std::valarray
bei Eintritt in den "Body" des Konstruktors?
-
Keine Ahnung, Ich dachte das ganze wird erst mit der Anweisung primeb gebaut.
-
Raubkatz schrieb:
Keine Ahnung, Ich dachte das ganze wird erst mit der Anweisung primeb gebaut.
Nein.
Was ich aber jetzt erst sehe:
primeb()
ist ja gar nicht der Konstruktor...
Das habe ich gestern nicht gesehen.
Gibt es einen Konstruktorprime::prime()
?Vorschlag:
Lad' Dir den Standard hier runter: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdfUnd schau Dir an, was zum Standardkonstruktor von
valarray
drin steht (26.6.2.2).
Und wenn es dann nicht klick macht meld Dich nochmal...
-
Furble Wurble schrieb:
Lad' Dir den Standard hier runter
lol?
Eine Referenz tuts auch. Ist für den täglichen Gebrauch vielleicht etwas handlicher.Eigentlich wäre es ein sinnvolles Projekt, den Standard in eine Form zu bringen, durch die man leicht navigieren kann und die man leicht durchsuchen kann. PDF ist da irgendwie nicht so das wahre.
-
Furble Wurble schrieb:
Gibt es einen Konstruktor
prime::prime()
?Ich möchte die Frage zurückziehen...Du hast die Klassendefinition ja oben gepostet...
-
Das sieht auch nicht so aus, als ob man dafür eine Klasse bauen müsste.
#include <iostream> #include <vector> std::vector<long> primeb(int n) { ::: } int main() { ::: std::vector<long> pz = primeb(99); ::: }
-
Ok, ich bin jetzt so weit, dass ich weiß, dass mein Valarray eine GRöße braucht, da dieses nicht dynamisch wächst wie z.B. ein Vector, aber egal wie mein primearray versuch zu definieren ich bekommen eine Fehlermeldung die mir sagt:unresolved overloaded function type, für das valarray
valarray<double> primearray(100);
-
Raubkatz schrieb:
Ok, ich bin jetzt so weit, dass ich weiß, dass mein Valarray eine GRöße braucht, da dieses nicht dynamisch wächst wie z.B. ein Vector, aber egal wie mein primearray versuch zu definieren ich bekommen eine Fehlermeldung die mir sagt:unresolved overloaded function type, für das valarray
valarray<double> primearray(100);Gut.
Jetzt kommt natürlich der Konstruktor ins Spiel, der das primearray initialisiert:
class prime //Deklariert die Klasse { public: prime() : primearray(0,100){} // ! valarray<int> primearray; //initialisiert das Valarray, in dem die Primzahlen abgespeichert werden void primeb(int n); };
Ich mach einfach mal weiter wie ein hirntoter Fragenbeantworteautomat, trotz KKs Hinweis
PS: Auch auf einen
vector
kann man nicht einfach mitoperator[]
zugreifen, wenn der leer ist...