Fehler im Tutorial O_o ?
-
Hallo ich wollte gerade diesen Source Code compilieren:
void PrintHeader (int pageNum); int main ( ) { int pNum = 1; // pNum initialisieren PrintHeader(pNum); // Funktion aufrufen // pNum ist hier immer noch 1! PrintHeader(10); // fixe Seitennummer } // Funktionsdefinition void PrintHeader(int pageNum) { cout << "Seiten-Nummer: " << pNum << endl; pageNum = 99; // Parameter verändern }aber da kommt folgende Fehlermeldung: Undefiniertes Symbol pNum
dann habe ich es mal so gemacht:
void PrintHeader (int pageNum); int main ( ) { int pNum = 1; // pNum initialisieren PrintHeader(pNum); // Funktion aufrufen // pNum ist hier immer noch 1! PrintHeader(10); // fixe Seitennummer } // Funktionsdefinition void PrintHeader(int pageNum) { int pNum; cout << "Seiten-Nummer: " << pNum << endl; pageNum = 99; // Parameter verändern }dann ging es aber wo ist denn da der Sinn bei dem Programm O_o
Irgendwie versteh ich net was der da in dem Tutorial meint also der Schreibt folgendes:
Bei einem Parameter vom Typ called-by-value erhält die aufgerufene Funktion nur eine Kopie des übergebenen Wertes. Daraus folgt, dass Änderung des Parameters zwar innerhalb der Funktion erlaubt sind, diese aber auch nur auf die Kopie des Ausgangswertes wirken. Wird die Funktion wieder verlassen, so hat sich am Wert des übergebenen Parameters nichts verändert. Die Definition eines called-by-value Parameters erfolgt in der Art, dass innerhalb der Parameterklammer der Funktion lediglich der Datentyp und Name des entsprechenden Parameters angegeben wird. Im Beispiel wird am Ende der Funktion der Wert des Parameters pageNum zwar immer auf 99 gesetzt, jedoch wirkt sich dies nicht weiter in main(...) aus.
Beim Aufruf von Funktion können Sie für einen called-by-value Parameter entweder eine Variable (erster Aufruf oben) oder aber eine Konstante (zweiter Aufruf oben) an die Funktion übergeben. Da die Funktion eine Kopie des Wertes erhält, kann es bei dieser Parameterart unter Umständen notwendig sein, sehr viele Daten zu kopieren. Dies gilt insbesondere dann, wenn die Funktion Objekte als Parameter erhält. Sie sollten diese Parameterart nach Möglichkeit auf die einfachen, bereits bekannten Datentypen wie int oder unsigned long beschränken.
kann mir wer vielleicht erklären was der da jetzt genau meint.
-
In Zeile 13 muss einfach nur pageNum statt pNum stehen.
-
ok thx
-
void PrintHeader (int pageNum); int main ( ) { int pNum = 1; // pNum initialisieren PrintHeader(pNum); // Funktion aufrufen // pNum ist hier immer noch 1! PrintHeader(10); // fixe Seitennummer } // Funktionsdefinition void PrintHeader(int pageNum) { int pageNum; cout << "Seiten-Nummer: " << pNum << endl; pageNum = 99; // Parameter verändern }das kam da raus ....

[C++ Fehler] Unit1.cpp(16): E2238 Bezeichner 'pageNum' mehrfach deklariert
[C++ Fehler] Unit1.cpp(17): E2451 Undefiniertes Symbol 'pNum'
[C++ Warnung] Unit1.cpp(19): W8004 'pageNum' wurde ein Wert zugewiesen, der nie verwendet wirdund was ist eigentlich hier mit gemeint:
PrintHeader(10); // fixe Seitennummerwas heisst fixe Seitennumer

-
Hi,
in der intalisierungliste von der Funktion PrintHeader wird pNum ja schon deklariert, das heißt sie ist in der Funktion bereits vorhanden und kann nicht nochmal erzeugt werden.
D.h du musst "int pageNum;" aus der zweiten Funktion entfernen.MFG ReduX
-
Bassmaster schrieb:
das kam da raus ....

Zeile 13 im ursprünglichen Code. Deine Änderung war sowieso Käse.
-
So ?
#include <iostream> using namespace std; void PrintHeader (int pageNum); int main ( ) { int pNum = 1; // pNum initialisieren PrintHeader(pNum); // Funktion aufrufen // pNum ist hier immer noch 1! PrintHeader(10); // fixe Seitennummer } // Funktionsdefinition void PrintHeader() { int pageNum; cout << "Seiten-Nummer: " << pNum << endl; pageNum = 99; // Parameter verändern }da kommt bei mir diese fehlermeldung:
[C++ Fehler] Unit1.cpp(17): E2451 Undefiniertes Symbol 'pNum'
[C++ Warnung] Unit1.cpp(19): W8004 'pageNum' wurde ein Wert zugewiesen, der nie verwendet wird
-
ah jetzt geht es

thx
-
aber wofür ist den jetzt:
pageNum = 1; // Parameter verändernin dem Kommentar steht ja Parameter verändern aber wenn ich da was veränder passiert gar nichts auch wenn ich es rausnehme funktioniert alles.
-
Das soll dir vermutlich zeigen, was C++ unter "call by value" versteht - du veränderst zwar lokal den Wert von pageNum (wenn du nach dieser Zeile noch eine Ausgabe machst, siehst du auch den veränderten Wert), aber das hat keine Auswirkung auf die übergebene Variable.
-
ok thx
-
warum kann der denn die Zahlen nicht aus geben wenn ich
<< pageNum << endl;weglasse
-
Weil das genau das die Ausgabe ist? Wenn du die Ausgabe weglässt, passiert natürlich keine Ausgabe mehr.
Wenn das nicht das ist, was du meintest, dann drück dich doch bitte mal etwas klarer aus.
-
Weil genau der Teil der Zeile dem Compiler klarmacht, daß du die Zahl (und einen Zeilenwechsel) ausgeben willst - wenn du das weglässt, gibst du nur den Text "Seiten-Nummer:" aus. (und wenn das Semikolon fehlt, beschwert sich der Compiler (zu recht))
-
ok ich glaub jetzt hab is verstanden thx

-