Funktionen... (Fehlermeldung)
-
So sollte das aber ebenfalls einen Fehler geben. Bist du sicher, dass er da keinen Header included hat?
-
Tatsächlich..
Bist echt ein Experte.. Seh's jetzt erst.
Er included
*long int flaeche_berechnen (int a_lokal, int b_lokal);
*und anschließend folgen
15 Zeilen Kommentar, wodurch ich den Header völlig
aus den Augen verlor.Damit kann ich's jetzt vollkommen nachvollziehen.
Ich wünsche dir alles Gute, drakon.
-
Mikrofon schrieb:
Damit kann ich's jetzt vollkommen nachvollziehen.
Ich wünsche dir alles Gute, drakon.Danke, gleichfalls.

-
Ich hoffe, dass Nexus dies sieht, bevor er
offline geht...Kann ich in einer Funktion ein Feld(?) übegeben lassen?
z.B. wenn in einer Funktion 6 Werte verarbeitet werden
sollen.. Kann ich da folgendes eingeben?void funktion(int x[5]);Oder umgekehrt beim Aufrufen der Funktion?:
funktion (z[5]);
-
Mikrofon schrieb:
Ich hoffe, dass Nexus dies sieht, bevor er
offline geht...Keine Angst, ich bleib schon noch kurz.

Arrays können nicht an Funktionen übergeben werden. Was man aber tun kann, ist Zeiger oder Referenzen auf sie zu übergeben.
Folgende Funktionsdeklarationen sind identisch, es wird jedes Mal ein Zeiger auf
intübergeben. Die Grösseninformation in den eckigen Klammern wird dabei ignoriert.void Function(int* Array); void Function(int Array[]); void Function(int Array[357]);Deshalb solltest du die Grösse explizit übergeben (wenn du es nicht mit Templates und Referenzen machst). Du kannst also Folgendes haben:
void Function(int* Array, unsigned int Size) { for (unsigned int i = 0; i < Size; ++i) std::cout << Array[i] << " "; } int main() { const unsigned int ArraySize = 7; // Arraygrösse als Konstante anlegen int Array[ArraySize] = {1, 4, 3, 0, 8, 5, 6}; Function(Array, ArraySize); }Du siehst also, man braucht beim Aufruf nur
Arrayzu schreiben. Man übergibt aber wie gesagt nicht das Array selber. Wenn manArrayschreibt, wird das Array implizit in einen Zeiger auf das erste Element konvertiert. Was man übergibt, ist also dieser Zeiger.Aber statt Arrays kann man auch STL-Container nutzen, dann ist z.B. auch die Grössenübergabe überflüssig. Zudem wird einem da die Speicherverwaltung abgenommen und man kann dynamische Arrays verwalten (zur Laufzeit Elemente anhängen, etc.).
-
Auf dich kann man zählen..

Hattest wie immer recht! Läuft jetzt..
-
Nun übertreibs nicht. So unfehlbar bin ich bei weitem nicht...

Aber gut, dass es dir geholfen hat.

-
Also vorhin konnte ich immer zwischendurch
prüfen etc. und es lief auch... nur jetzt
gibt's zwar beim Kompilieren keine Meldung,
dafür gibt es einen Absturz des "Dos-Fensters"
nach der ersten Eingabe..
Sowas ist das erste mal (nach ca. 100 kleineren
Progs).
Hab die letzten Änderungen, die ich vornahm rück-
gängig gemacht, jedoch ohne Erfolg. Das Ding läuft
nicht mehr..PS: Die Funktion 'gross' ist noch nicht fertig.
//Titel #include <iostream> using namespace std; void gross(int* Array, int size, int &superb); int main(void) { int i, big, max; int* feld; big=6; for (i=1; i<=6; i++) { cout << "\nBitte " << i <<". Zahl von 6 eingeben: "; cin >> feld[i-1]; } gross(feld, big, max); cout << endl << "Die groesste Zahl, die eingegeben wurde lautet: " << max << "\n\n\n"; system("Pause"); return 0 ; } // Hauptprogramm void gross(int* Array, int size, int &superb) { int j, hilf; hilf=0; for(j=6; j>=1 ;j--) { cout << "\n" << Array[size-j]; //Kontrolle via Ausgabe } superb=hilf; }
-
Hallo, mit
int* feld;legst du nur einen Zeiger auf
intan, kein Array. Der Zeiger ist zudem noch uninitialisiert, zeigt also irgendwo hin. Um dafür Platz zu reservieren, könntest du beispielsweisenewbenutzen.Aber in deinem Falle geht es eher um Arrays. Leg also ein solches an, das genügend gross ist, sodass alle Elemente Platz haben.
int feld[6];
-

Vielen Dank nochmals!
Ich hoffe, dass meine Klausur gut verläuft..Dann lade ich dich und drakon zum Essen ein..
Hoffe, ihr wohnt in der Nähe, sodass ich ein
gutes Restaurant kenne, welches nicht allzu
weit weg von euch ist.
-
Hmm, das könnte schwierig werden, drakon und ich wohnen beide in der Schweiz.

Aber mir reicht es, dass ich dir helfen konnte. Es gibt übrigens sehr wenige Leute, die so viel Dankbarkeit zeigen wie du. Das schätze ich sehr, oft hört man gar nichts oder teilweise sogar blöde Kommentare.
Viel Glück bei deiner Klausur.

-
Nexus schrieb:
Viel Glück bei deiner Klausur.

Merci.. Dir auch 'viel Glück' bei allem, was
du dir vornimmst. Möge Gott dir helfen.Okay, mit der Schweiz hatte ich nicht gerechnet.
Dann muss ich mir was anderes überlegen
Zeit hab ich ja noch.. Zur Klausur sind's noch 2 Wochen.Zurück zu C++.. Wenn ich bis dahin Probleme hab',
melde ich mich... falls du gestattest.Schönen Abend noch bzw. Gute Nacht!
-
Mikrofon schrieb:
Merci.. Dir auch 'viel Glück' bei allem, was
du dir vornimmst. Möge Gott dir helfen.Vielen Dank.

Mikrofon schrieb:
Zurück zu C++.. Wenn ich bis dahin Probleme hab',
melde ich mich... falls du gestattest.Sicher, ja. Ich bin relativ oft hier im Forum, und es gibt ja auch sonst sehr viele Leute, die dir bei Problemen helfen können.

Ich wünsche dir auch eine gute Nacht, machs gut.
-
Nabend allerseits...
Kriege in den Array keine Werte
eingelesen...//Titel #include <iostream> using namespace std; void einlesen(int* feld, int poly); int main() { int p; cout << "\nGrad des Polynoms eingeben: "; cin >> p; cout << "\n\n"; int Array[p]; einlesen(Array,p); system("Pause"); return 0; } void einlesen(int* &feld, int poly) { int i; for (i=1; i<=poly; i++) { cout << "Bitte " << i << ". Wert von " << poly << "eingeben :"; cin >> feld[i-1]; } }Es wird nicht kompiliert.
Ein Fehler in einer bestimmten Zeile
des Quellcodes liegt nicht vor.
Die Fehlermeldung lautet:[Linker error] undefined reference to `einlesen(int*, int)'
ld returned 1 exit statusWenn ich unten das &-Zeichen vor 'feld' entferne, klappt's.
Ich möchte aber, dass die eingegeben Werte an's Haupt-
programm zurückgeliefert werden..PS:
Wenn ich in die Zeile 5 statt feld
-> &feld
eingebe (und unten das & unten auch stehen lasse,
gibt es eine andere Fehlermeldung (Zeile 15):15 invalid initialization of non-const reference of type 'int*&' from a temporary of type 'int*'
-
Du brauchst das & bei der Funktionsdefinition nicht, die Werte werden auch so zurückgeliefert. Das & nach dem zeiger brauchst du nur, wenn du den Zeiger selbst in der Funktion verändern willst.
Ansonsten: Die Funktionsdefinition muss immer mit der deklaration übereinstimmen, sonst bekommst du eben Linkerfehler.
-
DANKE, BRAUNSTEIN....
Nun zu Struct (Strukturen)

Quellcode-Ausschnitt:
. . . cout << "\nKonto 1:\n\n" "Bitte Hausnamen eingeben: "; getline(cin, kunde1.name); cin >> kunde1.konto; cout << "\nBitte Kontostand eingeben: "; cin >> kunde1.geld; cout << "\n\n\nKonto 2:\n\n" "Bitte Hausnamen eingeben: "; getline(cin, kunde2.name); // <<<<<<<<<-------------- cout << "\nBitte Vornamen eingeben: "; getline(cin, kunde2.vorname); cout << "\nBitte Adresse eingeben: "; getline(cin, kunde2.adresse); cout << "\nBitte Kontonummer eingeben: "; cin >> kunde2.konto; cout << "\nBitte Kontostand eingeben: "; cin >> kunde2.geld; . . . .Die markierte Eingabe wird übersprungen..
Alle anderen Einlese-Befehle sind ok.
In einem anderen Programm hatte ich das
gleiche Problem. Manchmal wird der Befehl
getline(cin, x) nicht ausgeführt..Was mache ich falsch? Einer unserer Fachleute
wird es bestimmt wissen...
-
Du solltest nicht unformatierte (
std::getline()) mit formatierter (operator>>) Eingabe vermischen.Siehe dazu diesen Thread, besonders 7H3 N4C3Rs Beitrag auf der zweiten Seite.