C++ Bezeichner nicht gefunden. Was ist mein Fehler?

3 Antworten

Da liegt einiges im Argen:

In der Datei "main":

#include".h";
  • Der Dateiname ist sehr ungewöhnlich, aber kein Problem (höchstens für eine IDE oder den Dateimanager).
  • Das Semikolon am Ende ist unnötig. Üblicherweise setzt man hier keines.
XVektor v1(10), v2(10);
  • Der Typ XVektor ist nicht definiert. Das dürfte gar nicht kompilieren.

In der Datei ".h":

#include".h";
  • Die Datei inkludiert sich selbst. Das ist nicht gut, wobei ich nicht sicher bin, was dann passiert; ich vermute "Undefined Behavior". Lass es einfach weg.
float skalarprodukt(Vektor &v1, Vektor &v2);
  • Das deklariert eine Funktion mit zwei Argumenten vom temporären Typ Vektor&. Du wirst diese Funktion nie aufrufen können, weil der unbekannte Name Vektor nur als Platzhalter dient und sofort wieder vergessen wird — auch, wenn Du später diesen Typ definierst. Abhilfe schaffst Du mit einem #include "vektor.h" oder einer Vorab-Deklaration der Klasse Vektor:
    class Vektor;
    float skalarprodukt(Vektor &v1, Vektor &v2);
  • Der Typ float stammt aus den 70ern und hat meist nur 32bit. Das reicht nur für 6 Dezimalstellen und ist dabei oft langsamer als double, weil Coprozessoren seit Jahrzehnten mit 64 Bit rechnen.
  • Die Argumente werden in der Funktion vermutlich nicht verändert. Du solltest sie daher als const Vektor & definieren. Dann kann man beim Aufruf auch temporäre Ausdrücke einsetzen, z. B. skalarprodukt(a+b, a-b);
float standartabweichung(XVektor &vec);
  • Dasselbe wie oben (mit XVektor statt Vektor)
  • Und schreib bitte "standard" :-/

In der Datei ".cpp":

float XVektor::skalarprodukt(Vektor &v1, Vektor &v2) {
  • Das würde nur funktionieren, wenn Du vorab die Klasse XVektor definiert und dort eine Methode mit dieser Signatur deklariert hast. Aber selbst Dann wäre der Argumenttyp Vektor& wieder nur ein Platzhalter, der sich von allen anderen Typen unterscheidet.

Ich sehe in ".cpp" nichts, was in "main" verwendet wird. Deshalb breche ich hier ab.

Sicher, dass ".h" funktioniert? Benenne lieber die Datei um in bspw. Header.h

Standard schreibt man mit zwei "d".

Du musst die Funktionen vor ihrer Verwendung deklarieren, außerdem solltest Du die Vektoren vor ihrer Verwendung mit Daten füllen.