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 Konstruktor prime::prime() ?

    Vorschlag:
    Lad' Dir den Standard hier runter: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf

    Und 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 mit operator[] zugreifen, wenn der leer ist...


Anmelden zum Antworten