vektoren und void funktion
-
Hallo, ich soll einen vektor normalisieren und das als eine void funktion darstellen, die einzelnen unterprogramme funktionieren, aber mir fehlt noch das verständnis, wie ich das alles an eine void funktion übergeben soll. Mein versuch war folgender
#include <iostream> #include <vector> #include <math.h> using namespace std; double Norm(const vector<double> &v){ double c = 0; for (int k=0; k<v.size(); ++k) c=c + v[k]*v[k]; return sqrt(c); } vector<double>Divis(const vector<double> &v,double f){ vector <double> v2(v.size()); for (int k=0; k<v.size(); ++k) v2[k]=v[k]/f; return v2; } void Normalize(vector<double> &v){ double d = Norm(v); v = Divis(v,d); } int main (){ cout<<"Wie lang soll der Vektor sein?"<<'\n'; int i; cin>>i; cout<<"Geben Sie einzelnen Komponenten nacheinander ein!"<<'\n'; vector <double> v(i); for (int k=0; k<v.size(); ++k) cin>>v[k]; vector <double> v1 = Normalize(v); cout<<'\n'; for (int k=0; k<v1.size(); ++k) cout<<v1[k]<<'\n'; }Da bekomm ich aber diesen fehler
50:33: error: conversion from ‘double’ to non-scalar type ‘std::vector<double>’ requestedKann mir bitte jemand erklären was ich falsch mache.
-
In Zeile 50 gibt's keine doubles.
Noch'ne Bemerkung am Rande: Find's irgendwie blöd, dass Normalize nicht direkt auf dem Eingabevektor arbeitet und stattdessen über Divis ein komplett neuer Vektor erzeugt wird.
-
Die nummerierung ist hier um eine zeile verrutscht. Es ist die zeile 49 gemeint.
-
Normalize gibt doch gar nichts zurück, also kannst du den Aufruf auch nicht als Initialisierer für v1 verwenden.
Aber ich rate mal, dass das, was du hier zeigst, nicht dein wahres Programm ist. Das "double" da klingt eher so, als wenn du Norm mit Normalize verwechselt hättest -- also zusätzlich zum eigentlichen Fehler.
-
Namal schrieb:
Die nummerierung ist hier um eine zeile verrutscht. Es ist die zeile 49 gemeint.
Trotzdem ist das nicht die Fehlermeldung zum Code. In Zeile 49 gibt es auch keine doubles. Es gibt aber eine Funktion ohne Rückgabewert, deren Rückgabewert du einem vector<double> zuweisen möchtest. Finde den Widerspruch im letzten Satz und du hast dein Problem.
-
SeppJ schrieb:
Namal schrieb:
Die nummerierung ist hier um eine zeile verrutscht. Es ist die zeile 49 gemeint.
Trotzdem ist das nicht die Fehlermeldung zum Code. In Zeile 49 gibt es auch keine doubles. Es gibt aber eine Funktion ohne Rückgabewert, deren Rückgabewert du einem vector<double> zuweisen möchtest. Finde den Widerspruch im letzten Satz und du hast dein Problem.
Ja vielen dank! ich habe jetzt die zeile 49 einfach zu
Normalize(v);geändert, jetzt gehts.Das war mein denkfehler, ich wusste nicht dass man es so machen kann.
-
Namal schrieb:
geändert, jetzt gehts.Das war mein denkfehler, ich wusste nicht dass man es so machen kann.
Dann stellt sich die Gegenfrage, wieso du die Funktion bewusst so geschrieben hast, obwohl du deine anderen Funktionen genau andersrum gemacht hast. Du wirst doch wohl nicht abgeschrieben haben, oder
?
-
SeppJ schrieb:
Namal schrieb:
geändert, jetzt gehts.Das war mein denkfehler, ich wusste nicht dass man es so machen kann.
Dann stellt sich die Gegenfrage, wieso du die Funktion bewusst so geschrieben hast, obwohl du deine anderen Funktionen genau andersrum gemacht hast. Du wirst doch wohl nicht abgeschrieben haben, oder
?Na die aufgabe war vorher eine funktion für die norm und eine funktion für multiplikation eines vektors zu schreiben. Und dann kamm das als nächste aufgabe, mir ist bewusst, dass man das genauso mit const <vector> schreiben kann. Aber die aufgabe ist speziell so gestellt denk ich, sonst macht void keinen sinn.