Fehler im Quelltext
-
Allerdings solltest du nur Referenzen oder Zeiger übergeben, wenn die dahinterstehenden Werte in dieser Funktion verändert werden sollen (ich denke, proggingmania hat sich nur verdacht)

Edit: Kannst dir auch nen paar Sachen zu "Call by Reference" und "Call by Value" anschauen
-
@progginfmania: In deinem Beispiel macht sich das mit call by value besser, als mit referenzen:
#include <iostream> inline double add( double lhs, double rhs) { return lhs + rhs; } int main( ) { double value = 1; double array[ ] = { 2, 3 }; std::cout << add( value, array[ 1 ] ); }
-
Badestrand schrieb:
Allerdings solltest du nur Referenzen oder Zeiger übergeben, wenn die dahinterstehenden Werte in dieser Funktion verändert werden sollen (ich denke, proggingmania hat sich nur verdacht)

Edit: Kannst dir auch nen paar Sachen zu "Call by Reference" und "Call by Value" anschauen
kenner des eigenen oberstübchens schrieb:
@progginfmania: In deinem Beispiel macht sich das mit call by value besser, als mit referenzen:
Ja, das Beispiel war wohl Kagge.
Dachte da auch grad nur an die Optik und die Handbarkeit und so.
Versuche das mal wieder gerade zu biegen:#include <iostream> using namespace std; void g3( int *a ) { *a=3; } void g4( int &a ) { a=4; } int main() { int a = 0; g3(&a); cout << a << endl; g4(a); cout << a << endl; return 0; }
-
Wenn du schon möchtest, dass wir etwas "grade biegen" solltest du uns auch den Fehleroutput deines Compilers dazuschreiben.
-
wow, danke für die vielen und schnelle Antworten...meine Frage war wohl leider schlecht formuliert. Also mein eigentliches Problem liegt darin, dass ich den Syntaxfehler von
cout<<g2(z+1,&(z[3]));
suche..., das ist ne Prüfungsfrage Fehler aus nem Quelltext finden und auch erklären was falsch ist. Hab alle hinbekommen, aber hier heng ich fest. Hab in Büchern schon nachgeschaut, aber da findet man so explizite Beispiele nicht darum hab ich mich mal an ein Forum gewandt.
Falls also jemand mich erleuchten kann ?!

-
da steckt kein syntaxfehler drin. der fehler kann höchstens darin liegen, dass z nicht korrekt deklariert wurde.
double g2(double *a, double *b) { return *a + *b; // oder sonstwas } int main() { double z[] = { 1.0, 2.0, 3.0, 4.0 }; cout<<g2(z+1,&(z[3])); }gibt (wie erwartet) "6.0" aus.
-
Was für Fehler zeigt dein Compiler denn an?... Hast du <iostream> included und benutzt du den std-namespace?
-
Also wenn ich das ganze Compilieren will, kommt die Fehlermeldung
- left expression must be integral
- left operand type is 'std::ostream watcall (lvalue)'
- right operand type is 'void'
-
Dann zeig doch mal den kompletten Code, den du versuchst zu compilieren - der Fehler passt du keinem der Beispiele, die hier gepostet wurden.
(PS: Und eine void-Funktion hat übrigens keinen Rückgabewert, den du ausgeben könntest - vielleicht ist das ja dein Problem)
-
Alles klar ich werd mal die Aufgabenstellung und den Quelltext zeigen...dann wirds vielleicht etwas klarer

Aufgabe:
Was ist in den folgenden Zeilen falsch? Warum?
Es sind mehrere Fehler pro Zeile möglich. Die Fehler haben keine Auswirkung auf die folgenden
Zeilen, d.h. jede Anweisung geht davon aus, dass alle anderen korrigiert bzw. richtig sind. Nicht
nur Rechtschreibfehler sind Fehler. Vorsicht: Nicht alles ist falsch.) Für jeden gefundenen und
erklärten Fehler gibt es zwei Punkte, für jeden angekreuzten Fehler, der keiner ist, einen Punkt
Abzug. (Minimale Gesamt-Punktzahl dieser Aufgabe: 0)#include <iostream.h>
#include <math.h>
void g4(double *a, double *b);
void main() {
/* Hier das Hauptprogramm /
int i; double z[10],sum;
for (i=1;i<=10;i++) {
z[i]=ii;
sum += sin(z[i]);
}
cout<<g2(z+1,&(z[3]));
cout<<'Das Ergebnis: '<<*sum<<endl;
delete[] z;
}
// Hinweis: Dieses Programm soll keinen vernünftigen Zweck erfüllen,
// außer als Prüfungsaufgabe.
/* Die einzelnen Fehler gehen von der Fehlerfreiheit des Restes aus.
*/Ihr braucht mir jetzt nicht alle Fehler raussuchen, mir fehlt nur der Fehler in der Zeile
cout<<g2(z+1,&(z[3]));
dachte es ist weil oben die Fkt g4 dekl. ist und hier heißts g2, ist aber irgendwie nicht der einzige Fehler?Ich hoffe das ganze ist nicht zu confused...(ich komm einfach nicht drauf!
)
-
Öhm. Wenn ich da nichts offensichtliches übersehe ist (erstmal) der einzige Fehler in der Zeile, dass g2 nicht deklariert ist. Wenn man jetzt noch den Kontext mit einbezieht, könnte man darauf kommen, dass es g4 statt g2 heissen muss.
Dadurch wird dann ein weiterer Fehler offenbart, denn g4 hat keinen Rückgabewert, kann also nicht auf der rechten Seite des Operators << stehen. Ansonsten sehe ich dort keinen weiteren Fehler.
-
Der zweite Fehler in der Zeile ist, daß die Funktion g4() nichts zurückgibt - und damit auch nichts ausgegeben werden kann. Wenn du die Zeile so verwenden willst, brauchst du eine Funktion 'int g2(double*a,double*b);' (statt des int kann auch ein anderer Datentyp stehen, aber bestimmt kein 'void').
-
edit: erledigt

-
Alles klar, der Rückgabewert ist also der Fehler!!!
danke für eure Hilfe, wäre da nie alleine drauf gekommen...
(...hab noch einiges zu lernen
)danke nochma