Speicherverwaltung /programm für polynomberechung



  • Hallo,

    ich habe eine frage zur speicherverwaltung in c++ (visual studio 08):

    Ich würde gerne ein Programm schreiben zu berechnung von polynomen. Die koeffizienten würde ich gerne in ein Array schreiben aber das problem ist das erst zur laufzeit bekannt wird, welche und damit auch wie viele koeffizienten ein Polynom haben soll. Ich habe drei dateien:
    - eine main.cpp (testdatei)
    - eine Polynom.cpp ( die implementierung)
    - eine Polynom.h (die definition , enthält die klasse polynom)

    Jetzt ist meine Frage wo das Array rein soll in welche der drei Dateien. ich kann ja erst zur laufzeit festlegen wie viele koefftienten das polynom haben soll...

    wär echt toll wenn mir kurz jmd sagen könnte wo ich rein tun soll mit begründung.



  • Woher sollen wir wissen, in welche Datei du das tun sollst?

    Aber ein Tipp bezüglich dynamischen Arrays: Wenn du new[] und delete[] verwendest, muss die Grösse erst zur Laufzeit feststehen.



  • ah genau sowas wollte ich haben danke : )

    d.h. ich könnte z.b.

    in die headerdatei einen zeiger auf ein dynamisches array setzen das die koeffizienten enthält. und das wäre dann auch zur laufzeit.?



  • so jetzt habe ich mal einen versuch gemacht und bekomme fehler

    __________________________________
    in Polynom.h

    class Polynom
    {

    public:
    Polynom(float koeffitienten[]);

    private:
    float* koeff[];

    };

    _____________________________________

    in Polynom.cpp

    Polynom::Polynom(float a[])
    {
    int laenge = (int) sizeof(a)/sizeof(a[0]);
    float k[laenge];
    Polynom::koeff = k;

    }

    Die Fehler sind:

    polynom.cpp(9) : error C2057: Konstanter Ausdruck erwartet

    polynom.cpp(9) : error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich.

    polynom.cpp(9) : error C2133: 'k': Unbekannte Größe

    polynom.cpp(10) : error C2440: '=': 'float []' kann nicht in 'float *[]' konvertiert werden

    ______________________________
    wie kann es denn sein das ein konstanter ausdruck erwartet wird (bezieht sich auf laenge) wenn man das erst zur laufzeit weiß.

    ich möchte in Polynom.h eigentl. nur einen zeiger haben der auf ein array umgebogen werden kann ....

    gruß Ryu



  • Benutze bitte [cpp]-Tags (die erste weisse Schaltfläche).

    Das Folgende funktioniert so nicht.

    float* koeff[];
    

    Mach stattdessen

    float* koeff;
    

    Und dann in der Implementierungsdatei

    koeff = new float[size];
    // koeff benutzen
    delete[] koeff;     // DIESE ZEILE NICHT VERGESSEN!
    

    Aber besser ist es, du verwendest gleich std::vector aus der Standardbibliothek. Dir scheinen allerdings noch einige Grundlagen zu fehlen, ich rate dir zu einem guten C++-Buch wie dem C++-Primer oder Thinking in C++. Für die hier relevanten Themen gibt es allerdings auch einzelne Artikel in diesem Forum, schau mal hier (Stichworte: Pointer, Speicherverwaltung, STL).



  • vielen dank , ich probier die tags dann bei der nächsten antwort.

    ja das mit den grundlagen stimmt schon ich bring noch zu viel bei der Speicherverwaltung durcheinander..

    aber ich probier mal deine vorschläge...


Anmelden zum Antworten