error C3861
-
Hi leute kann mir jemand helfen? ich hab dieser programm geschrieben, nur wenn ich es starte sprngt als fehler c3861 an der Bezeichner Lingl wurde net gefunden. Weiß jemand was ich vergessen hab??
#include <iostream>
#include <cmath>
using namespace std;
#include<string>
#include<sstream>
#include<iomanip>double Det(double a[3][3])
{
double ret;ret=a[0][0]*a[1][1]*a[2][2] + a[0][1]*a[1][2]*a[2][0] + a[0][2]*a[1][0]*a[2][1] - a[0][2]*a[1][1]*a[2][0] - a[0][0]*a[1][2]*a[2][1] - a[0][1]*a[1][0]*a[2][2];
return ret;
}void main()
{
int i,j;
const double PI=3.14159;
double g, d[3], l[4], a[3][3], b[3],f[3];for(i=0;i<3;i++)
{
cout<<"Eingabe von Winkel "<<i+1<<" in Grad"<<endl; //Einlesen von Winkeln
cin>>d[i];
}for(i=0;i<4;i++)
{
cout<<"Eingabe von Laenge "<<i+1<<endl; //Einlesen von den Längen
cin>>l[i];
}cout<<"Geben sie die Gewichtskraft an "<<endl; //Einlesen der Gewichtskraft
cin>>g;for(i=0;i<3;i++)
{
d[i]=2*PI/360*d[i]; //Winkel in Bogenmaß umwandeln
}a[0][0]=cos(d[0]);
a[0][1]=cos(d[1]);
a[0][2]=-cos(d[2]);
a[1][0]=sin(d[0]); //Berechnungen der Matrix
a[1][1]=sin(d[1]);
a[1][2]=sin(d[2]);
a[2][0]=sin(d[0])*l[0];
a[2][1]=sin(d[1])*l[1];
a[2][2]=sin(d[2])*l[2];b[0]=0;
b[1]=g; //Berechnungen des Vektors
b[2]=g*l[3];cout<<"Koeffizientenmatrix A: "<<endl; //Ausgabe der Matrix
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<setprecision(4)<<fixed<<"\t"<<a[i][j]<<"\t";
}
cout<<endl;
}cout<<"Absolutglieder B:"<<endl<<"\t"; //Ausgabe des Vektors
for(i=0;i<3;i++)
{
cout<<setprecision(4)<<fixed<<b[i]<<"\t";}
Lingl(a,b,f);
for(i=0;i<3;i++)
cout<<"Auflager kraft"<<i+1<<"="<<f[i]<<endl;}
void Lingl(double a[3][3], double b [3], double f[3])
{
double deta;
double m[3][3];
int i,j;deta=Det(a);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
m[i][j]=a[i][j];
m[0][0]=b[0];
m[1][0]=b[1];
m[2][0]=b[2];
}
}f[0]=Det(m)/deta;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
m[i][j]=a[i][j];
m[0][1]=b[0];
m[1][1]=b[1];
m[2][1]=b[2];
}}
f[1]=Det(m)/deta;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
m[i][j]=a[i][j];
m[0][2]=b[0];
m[1][2]=b[1];
m[2][2]=b[2];
}}
f[2]=Det(m)/deta;
}
-
Du verwendest die Funktion bevor der Compiler sie kennt. Deklariere einen Funktionsprototypen für Lingl vor der Verwendung (z.B. nach den Includes oder in einen Header, den du dann inkludierst).
-
Higgi schrieb:
Weiß jemand was ich vergessen hab??
Code Tags und die Benutzung der Forensuche.
Google hätte es auch getan.Der Fehler kommt auch nicht von deinem Programm, sondern vom Compiler.
Eine Funktion muss vor der ersten Benutzung dem Compiler bekannt sein.
Entweder die definierst sie vorher, indem du den Code vor der ersten Benutzung hinschreibst (so wie bei Det).Oder du deklarierst sie vorher, indem du nur den Prototypen schreibst:
void Lingl(double a[3][3], double b [3], double f[3]);Diese Zeile machst du nach den #include.
Achte auf das ; am Ende.
-
Dein komplettes Programm ist teilweise Blödsinn. Ich habe jetzt keine Zeit alle Macken aufzuzählen, aber schon das
void main()heißt gar nichts gutes. Wie lernst du C++?
-
Soll da ein lineares Gleichungssystem A*x=b gelöst werden? Ich kann das nur erahnen, aber nicht wirklich in deinem Programm erkennen. Das sieht schon sehr komisch bis falsch aus, also Lingl.
Verwende lieber so etwas wie Eigen für lineare Algebra. Da kann das dann so aussehen:
#include <Eigen/Dense> ... Eigen::Matrix3d A; // 3x3 doubles Eigen::Vector3d b; // 3x1 doubles A << 1,2,3, 4,5,6, 9,8,9; b << 2, 3, 4; Eigen::Vector3d x = A.fullPivLu().solve(b); // ^^^^^^^^^ ^^^^^^^^ // Faktorisierung Mit Faktorisierung // von A berechnen A^-1 * b berechnenfertig.
Vorteile:
- Du hast gescheite Typen für Matrizen und Vektoren (Vektoren sind Matrizen mit einer Spalte bzw Zeile), die einem das Leben viel einfacher als double[3][3] machen.
- Die implementierten Algorithmen wurden schon gut getestet.Also, von 2x2 und 3x3 Matrizen kann man so, wie du es gemacht hast -- ich nehme an, das ist die Zeilen- oder Spaltenentwicklung -- die Determinante noch berechnen. Bei größeren Matrizen ist das allerdings eine ziemlich blöde Idee. Es sind schon Leute aus ihrem Job dafür gefeuert worden, weil sie eine Determinante einer größeren Matrix so berechnet haben. Die haben scheinbar in LinA und Numerik nicht ganz aufgepasst. Überlass die Algorithmen den Profis, vermeide die Berechnung von Determinanten und Inversen, löse Gleichungssysteme direkt oder iterativ.
-
Hi, thx an alle Beiträge hat mir geholfen. Ja ich weiß dass das net sehr professionell aussieht aber ich bin ja au kein informatik student. Ich studiere Maschinenbau und hab informatik nur dieses Semester, also bitte verzeiht mir wenn meine Programmierung etwas undurchsichtig ist