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