Einfach Übung, viele große Fehler!
-
pumuckl schrieb:
Ausgabe(&MeinVektor);
-
Huhu, aber kann das denn so funktionieren? Ich habe doch oben die Funktionen. Da C+ aber von oben nach unten arbeitet, kennt er doch oben mein Array() noch garnicht wenn ich es unten erst deklariere, oder?
Sorry wenn ich soviel frage, ist echt nicht so einfach wenn einem die Person nicht gegenüber sitzt ..... ^^
So siehts grad aus, aber sollte ich oben den "ZeigerAufVector nicht auch umbenennen?
void Funktion1(vector<int>* ZeigerAufVector) { for (size_t i=0;i<Array.size();i++) { cout << "Bitte geben sie den Wert fuer dieses Array an: " << endl; cin >> Array.at(i) ; system("cls"); } } void Funktion2(const vector<int>* ZeigerAufVektor) { for (size_t i=0;i<Array.size();i++) { cout << Array.at(i) << endl; } } int _tmain(int argc, _TCHAR* argv[]) { vector<int> Array(10); Funktion1(&Array); Funktion2(&Array); system("pause"); return 0; }LG
-
Limatex schrieb:
Huhu, aber kann das denn so funktionieren?
Wenn ich nichts übersehen habe, ja.
Limatex schrieb:
Da C+ aber von oben nach unten arbeitet, kennt er doch oben mein Array() noch garnicht wenn ich es unten erst deklariere, oder?
Ein Beispiel:
void Funktion(int Integer) { cout << Integer; //Integer bezieht sich auf das Objekt, das als Parameter gegeben wurde } int main() { int a = 4; Funktion(a); //"a" ist in der Funktion das selbe wie "Integer" }Limatex schrieb:
Sorry wenn ich soviel frage, ist echt nicht so einfach wenn einem die Person nicht gegenüber sitzt ..... ^^
Dafür sind wir da.
-
EOutOfResources schrieb:
pumuckl schrieb:
Ausgabe(&MeinVektor);
sry habs korrigiert
-
Die beiden Arrays (Da bei array.size) werden mir aber in beiden Funktionen jeweils noch als nicht definiert gemakert.
Array.at ist aber nicht rot.
-
Aha, jetzt seh' ich es. Statt
Arrayschreibst du einfach*ZeigerAufVector(innerhalb der Funktionen).
-
...und ggf auch mit Klammern drumherum, also
(*ZeigerAufVector), da das Sternchen als Präfixoperator weniger stark bindet als[]oder.at.
-
Ach scheiße ich bin echt durcheinander

Welches "Array" meinst du nun? Irgendwie hab ich mich grad verheddert....^^
-
Limatex schrieb:
Welches "Array" meinst du nun?
Ersetzt jedes "
Array" in beiden Funktionen durch "(*ZeigerAufVektor)".
-
Okay, vielen Dank! Hat funktioniert!!

Und was bedeutet das hier in den Klammern? Ist das der "Wert" der dem Zeiger zugewiesen wird oder wie?
Funktion1(&Array); Funktion2(&Array);
-
Limatex schrieb:
Ist das der "Wert" der dem Zeiger zugewiesen wird oder wie?
Ja, ist es. Im Buch deiner Wahl sollte im Zusammenhang mit Zeigern auch der Adressoperator erwähnt werden.
-
Bin ja grad dabei den Code zu optimieren und noch ein paar zusätzliche Funktionen einzubauen. Nun wollte ich die Ausgabe sortieren, doch beide Klammern vor den letzten beiden vorderen Zeigern werden rot gemarkert mit der Begründung "Der Ausdruck muss ein Änderbarer Ivalue sein!
Nachdem ich die beiden = durch == ersetzt habe waren die Klammer zwar weg, aber beim ausführen kam ein neues Fenster:
void Sortieren(const vector<int>*Zeiger) { int hilf; for(size_t i2=0;i2<(*Zeiger).size();i2++) { for(size_t i=0;i<(*Zeiger).size();i++) { if((*Zeiger).at(i+1)>(*Zeiger).at(i)) { hilf=(*Zeiger).at(i); (*Zeiger).at(i)==(*Zeiger).at(i+1); (*Zeiger).at(i+1)==hilf; } } } }http://img232.imageshack.us/img232/8312/capturemk.jpg
LG
EDIT: bzw. kommt jetzt wo ich die normalen[] Arrays zu .at() gemacht habe eine andere reihe von fenster welche aber auch etwas von out of range erzählt!
-
-
statt (*Zeiger).bla kannst du auch Zeiger->bla schreiben. Lies dir wirklich mal das Kapitel über Zeiger im C++-Buch deiner Wahl durch.
-
Die Meldung "Ausdruck muss ein änderbarer lvalue sein" bezieht sich vor allem auf das änderbar. Du hast den Zeiger in der Argumentliste so deklariert, dass es ein Zeiger auf const ist, d.h. dass der vector, auf den der Zeiger zeigt, nicht verändert werden darf. Die Zuweisung auf das Element ändert aber den vector, das widerspricht sich also.
-
Nehmen wir an, size() sei 10. Überleg mal, was in der inneren Schleife passiert, wenn i 9 ist, vor allem was beim zweiten at()-Aufruf übergeben wird. Dann weißt du auch woher die Fehlermeldung kommt.
-
== und = sind zwei völlig unterschiedliche paar Schuhe, ich hoffe du weißt das.
-