Merkwürdige Fehlermeldung
-
Vielleicht, weil du den Variablen nie etwas zuweist? Darauf könntest du übrigens selbst kommen, wenn du 1. deinen Code genauer kennen, 2. Zwischenresultate zum Testen ausgeben, 3. einen Debugger benutzen würdest.
Und komm besser von globalen Variablen weg, bevor du sie dir angewöhnst.
-
Naja ich bin gerade mal ein paar Tage dabei. Das mit den globalen Variablen muss ich mir dann mal durch den Kopf gehen lassen.Ist es wohl deswegen besser,damit nicht so viel Speicher verbraucht wird,weil die lokalen nach Aufruf der Funktion sofort gelöscht werden?Der Debugger zeigt mir schon ein Windowfenster mit Error an,so dass der gar net erst startet.
Das Problem ist ja,dass die Lehrbücher nur so husch husch über die Themen sausen.
Also,wenn ich den Code von Funktion printGl() in die die Funktion berechne() einfüge, funktioniert das ganze wunderbar.
Wie erreiche ich denn, dass die Werte aus Funktion 1 in Funktion 2 zur Verfügung stehen? Das scheint ja nicht der Fall zu sein,wie ich rausgefunden habe....
-
nicobaerli schrieb:
Ist es wohl deswegen besser,damit nicht so viel Speicher verbraucht wird,weil die lokalen nach Aufruf der Funktion sofort gelöscht werden?
Nein, das hat nichts mit Speicherverbrauch zu tun. In einem C++-Programm versucht man meistens, gegenseitige Abhängigkeiten minimal zu halten und Variablen möglichst lokal zu deklarieren, um Fehlerquellen auszuschliessen. Globale Variablen sind schlecht, weil sie von überall sichtbar sind und entsprechend unkontrolliert von überall geändert werden können.
nicobaerli schrieb:
Das Problem ist ja,dass die Lehrbücher nur so husch husch über die Themen sausen.
Hmm. Vielleicht handelt es sich auch um schlechte Lehrbücher. Diese sind für das Lernen von C++ leider eher die Regel als die Ausnahme...
nicobaerli schrieb:
Wie erreiche ich denn, dass die Werte aus Funktion 1 in Funktion 2 zur Verfügung stehen? Das scheint ja nicht der Fall zu sein,wie ich rausgefunden habe....
Kannst du das nicht per Parameterübergabe regeln?
-
Danke erstmal für die Antworten, ich werd mir dazu nochmal gezielt Gedanken machen.
Das war ja eben meine Frage,wie kann ich die Parameter einer Funktion in die nächste Funtion übernehmen?Eben das ist sowas, was ich im Buch nicht finde.Ich will ja auch nicht Programmierer werden,ich brauch diese Vorlesung für mein Studium der physikalischen Technik. Bin beim Programmieren ne totale Niete.....
Wie sieht denn so eine Übergabe Codetechnisch aus?Also ich habe ne Funktion,die mir zwei Werte berechnet.Diese Werte möchte ich mit einer anderen Funktion ausgeben......
-
Die Parameter kannst du innerhalb der Funktion wie ganz normale Variablen nutzen. Also kannst du sie auch an andere Funktionen weitergeben.
void func1(int a) { } void func2(int a, int b) { func1(a); // weitergeben an andere Funktion }
-
Aha, dann muss ich also nur die eine Funktion innerhalb der anderen aufrufen?Das geht auch,wenn die Funktion mehr als einen Rückgabewert hat?In dem Fall die beiden Lösungen der quadratischen Gleichung? Soviel ich gelesen habe, gibt die Returnanweisung immer den Rückgabewert.Aber eben nur einen hab ich gelesen. Na ich werd das mal ausprobieren, werde mal die berechnen Funktion in der Ausgeben Funktion aufrufen.Danke für den Tip.
-
nicobaerli schrieb:
Aha, dann muss ich also nur die eine Funktion innerhalb der anderen aufrufen?
Genau.
nicobaerli schrieb:
Das geht auch,wenn die Funktion mehr als einen Rückgabewert hat?In dem Fall die beiden Lösungen der quadratischen Gleichung?
Rückgabewert kann eine Funktion höchstens einen haben. Das andere sind Parameter, die auch verwendet werden können, um Information von der Funktion an den Aufrufer zurückzugeben (mittels Zeiger oder Referenzen).
nicobaerli schrieb:
Soviel ich gelesen habe, gibt die Returnanweisung immer den Rückgabewert.Aber eben nur einen hab ich gelesen.
Ja, mit
returnwird die Funktion beendet und der angegebene Wert zurückgegeben. Du musst aber wie gesagt zwischen Parametern und Rückgabewert unterscheiden.
-
Also das probier ich gleich morgen mal.Dachte mir schon,dass die Zeiger zu was gut sind.Ich hab auch das Prinzip der Zeiger verstanden glaube ich, nur hab ich immer Probleme, das in den Code umzusetzen.Aber gleich morgen,mach ich mich ran an die Problematik...danke für die Ratschläge....
-
Nexus schrieb:
nicobaerli schrieb:
Das geht auch,wenn die Funktion mehr als einen Rückgabewert hat?In dem Fall die beiden Lösungen der quadratischen Gleichung?
Rückgabewert kann eine Funktion höchstens einen haben. Das andere sind Parameter, die auch verwendet werden können, um Information von der Funktion an den Aufrufer zurückzugeben (mittels Zeiger oder Referenzen).
Mehrere Rückgabewerte kannst du entweder über Zeiger/Referenzen lösen, wie Nexus gesagt hat, oder aber auch über eine selbstdefinierte Struktur, die soviele Member hat, wie du brauchst.
struct myStruct { int WertA; int WertB; }; myStruct myFunc() { myStruct x; x.WertA=1; x.WertB=2; return x; }
-
std::pair (bei nur zwei Werten) und boost::tuple sind auch noch Möglichkeiten.
-
Hy, danke sehr,ich habe mein programm erstmal zum laufen gebracht. Hier ist es:
#include <iostream> #include <cmath> using namespace std; double x, y, z, erg1, erg2; double printGl(double a,double b,double c); double berechne(double, double, double,double*, double *); int main() { cout<<"a= "<<endl; cin>>x; cout<<"b= "<<endl; cin>>y; cout<<"c= "<<endl; cin>>z; printGl(x,y,z); system("pause"); } double berechne(double a, double b, double c,double *ptr1,double *ptr2) { double disk= sqrt(b*b-4*a*c); *ptr1= (-b+disk)/(2*a); *ptr2= (-b-disk)/(2*a); return 0; } double printGl(double a, double b, double c) { double x1=0.0, x2=0.0; berechne(a,b,c,&x1,&x2); cout << "a = " << a << " b= " << b << " c= " << c << endl; cout << "Die Loesungen heißen : " << endl; cout << "x1 = " << x1 << endl; cout << "x2 = " << x2<< endl; return 0; }allerdings habe ich hier den pointer gar nicht erst auf ne Variable zeigen lassen. Wieso geht das,wenn ich das doch aber erst machen müsste?
Nun muss ich nur noch das Lösbarkeitskriterium einbringen,das ist aber net so schwer.
Das mit der Struktur werd ich mir gleich mal anschauen,und die beiden anderen Befehle,muss ich mal probieren.Danke für die Hilfe.So lernt man mehr,als durch Bücher....
-
nicobaerli schrieb:
allerdings habe ich hier den pointer gar nicht erst auf ne Variable zeigen lassen. Wieso geht das,wenn ich das doch aber erst machen müsste?

Wieso? Machst du doch!Du übergibst an die Funktion die Adressen von Variablen, die den Pointern dadurch zugewiesen werden.
-
ach hier:
nicobaerli schrieb:
berechne(a,b,c,&x1,&x2);stimmt und x1,x2 hab ich deklariert und definiert

Also so langsam machts klick, muss noch bissi üben....