Rückgabe einer Variable aus einer Funktion funktioniert nicht



  • Hallo,

    Folgende Fehlerneldung kommt nach dem kompilieren meiner Klasse:

    [C++ Fehler] File1.h(22): E2235 Elementfunktion muß aufgerufen oder ihre Adresse übernommen werden

    Hier ist meine Klasse:

    class matrix
    
    {
    public:
    
    std::valarray<double> v(int);//Hier soll die Matrix gespeichert werden
    
    matrix()
    {
    matrix m;
    std::valarray<double>h(8);//Hilfsvektor 
    for (int i=0;i<=8;i++)
            h[i]=i;
            m.v(8)=h;
    };
    const std::valarray<double>& matrix::getMatrix()const 
    { 
    return v; //Hier kommt die Fehlermeldung
    }; 
    
    };
    

    😕

    MfG
    Fleedo



  • std::valarray<double> v(int);

    diese funktion v liefert einen std::valarray<double> zurueck und nimmt einen int als param.



  • Hi

    Aber ich dachte daß durch den Integer Wert hinter valarray die Länge des Vektors angegeben wird.

    std::valarra<double> (8);
    // Ist ein Vektor der 8 double Werte aufnimmt
    

    THX

    Fleedo



  • Fleedo schrieb:

    Aber ich dachte daß durch den Integer Wert hinter valarray die Länge des Vektors angegeben wird.

    vergleich mal
    std::valarray<double> v(int);
    mit
    int abs(int);

    siehst du: gleiche signatur 🙂



  • "int" ist aber ein Typ und "8" ein Wert.

    Außerdem:

    Fleedo schrieb:

    matrix()
    {
    matrix m;
    ...
    };
    

    Das sieht nicht gut aus *find* Was soll der Konstruktor überhaupt tun?

    Und warum ist v nicht private, wenn es eine Zugriffsfunktion gibt? (Das matrix:: vor der Zugriffsfunktion sollte btw auch weg.)



  • Hi

    Der Konstruktor soll dem valarray v die werte 1-8 zuweisen.
    Das Problem ist wenn ich std::valarray<double>(8) schreibe, dann
    bekomme ich folgende Fehlermeldung :

    [C++ Fehler] File1.h(4): E2293 ) erwartet

    desweiteren geht es ohne das:

    matrix m; im defaultkonstruktor nicht.

    Das matrix:: hab ich weggetan (ist aber egal ob es dar steht oder).

    @ Shade Of Mine:
    Das mit dem Integer hab ich abgeändert und zwar so:

    int anzahl;
    std::valarray<double>(anzahl)
    matrix()
    {
    anzahl=8;
    };
    

    THX

    Fleedo



  • Fleedo schrieb:

    Der Konstruktor soll dem valarray v die werte 1-8 zuweisen.
    Das Problem ist wenn ich std::valarray<double>(8) schreibe, dann
    bekomme ich folgende Fehlermeldung :

    [C++ Fehler] File1.h(4): E2293 ) erwartet

    Du kannst das valarray auch nicht direkt in der Klassendefinition initialisieren, sondern nur definieren:

    std::valarray<double> v;
    

    Und es dann im Konstruktor der matrix initialisieren:

    matrix::matrix() : v(8) { ... }
    

    Fleedo schrieb:

    desweiteren geht es ohne das:

    matrix m; im defaultkonstruktor nicht.

    Klar, du greifst ja auch darauf zu. Aber im Konstruktor der Matrix eine Matrix zu erstellen ist keine gute Idee. Du darfst selbst herausfinden, warum 🙂
    Wenn du die eigenen Elemente der Matrix initialiseren willst, kannst du im Konstruktor auf die einfach über "v" zugreifen.



  • ich glaube du solltest dir nochmal n C++ Tutorial durchlesen (du hast gravierende verstaendnis probleme)...

    std::valarray<double> v(8);

    das geht nicht, denn du darfst variablen erst im Ctor initialisieren!

    btw:

    class Klasse
    {
    public:
      Klasse() { Klasse k; }
    };
    

    das ist eine schoene rekursion 😉



  • Hi

    Ich weiß schon wann ich den valarray intialisieren darf 😉

    Leute dann zeigt mir mal wie ich es richtig mache weil sonst dreh ich noch
    durch !!!

    class matrix
    
    {
    std::valarray<double> v;
    
    public:
    
    matrix()
    {
    v(8) {//Hier müsste ich dann die Werte dem Valarray zuweisen oder ?};
    };
    };
    

    Das sollte dann funktionieren oder ?



  • Hi Leute.

    Ich denke so ist es besser aber die Ausgabe krieg ich nicht hin:

    class matrix
    {
    std::valarray<double> v;
    
    public:
    
    matrix()
    {
    std::valarray<double> h(8)
    for (int i=0;i<=8;i++)
            h[i]=i;
            v=h;
    };
    
    void ausgabe()
    {
    //Hier sollte eine Anweisung rein die einen Wert z.b
    //v[1] in ein Edit(C++ Builder) Fenster ausgibt.
    };
    
    };
    

    Wie kann man das machen ???



  • operator void schrieb:

    matrix::matrix() : v(8) { ... }
    


  • Hi

    Tausendmal Danke für den Schubs in die richtige Richtung.
    Sorry aber manchmal sieht man den Wald vor lauter Bäumen nicht !!!

    THX
    Fleedo


Anmelden zum Antworten