Problem bei Funktion mit Zeigern
-
Hallo an alle.
Ich bin neu hier und habe gleich mal eine Frage.
Ich bin nicht so der Crack wenn es um Zeiger und Referenzen geht darum mein Problem:
Ich versuche aus einer Funktion eine andere Funktion aufzurufen, die die Reihenfolge eines Arrays umkehren soll. Das ganze soll mit Zeigern realisiert werden. Falls jemand eine andere Idee hat, ist diese selbstverständlich erwünscht. Mein Problem tritt in der Funktion "inArray()" auf, an der Stelle, wo die Funktion "swapArray()" aufgerufen wird. Fehlermeldung Dev-C++:
44 cannot convert `int*' to `int**' for argument `1' to `int swapArray(int**, int*)'
Hier mal mein Code:#include <iostream> using namespace std; int swapArray(int *array[], int *index) { int d=*index; int swapper[d], e=0; do { swapper[e] << *array[d]; e++; d--; } while (d >= 0); return swapper[e]; } int inArray (int *ar, int *zahl) { int b=0, c=0, i=0; do { b = *zahl / 10; b *= 10; ar[c] = *zahl-b; *zahl /= 10; c++; } while (*zahl != 0); *zahl = c; swapArray (ar, &c); return ar[i], *zahl; } int main () { return 0; }Mit freundlichen Grüßen
Mr Crown
-
int swapArray(int *array[], int *index)Erwartet als erstes Argument einen Zeiger auf ein Array von Zeigern auf int.
int swapArray(int *array, int *index)Wäre wahrscheinlich das, was sich Compiler lässt. Allerdings ist dein Code so verworren und voller Fehler, dass ich mich wundere, dass es keine anderen Fehler gegeben hat. Alleine schon, dass du ein Array mit einem nicht-statischen Wert erzeugen willst ist schon einmal völliger Blödsinn.
Und btw:
Lad dir doch MSVC++, oder Code::Blocks, die sind aktueller, als DevC++.
-
Hi,
nunja, abgesehen davon, dass das viel unnötige Fingerbrecherei ist - die Fehlermeldung ist doch eindeutig:
...cannot convert `int*' to `int**' for argument `1' to `int swapArray(int**, int*)' ...
Hier nochmal Dein relevanter Code:
... int swapArray(int *array[], int *index) // Deklaration von swapArray: 1. Parameter braucht ein int*[] bzw. int** ... ...(int *ar, ...) // ar ist also ein int* ... swapArray (ar, &c); // hier übergibst Du ar als ersten Parameter an swapArray() ...Oder "fachlich" ausgedrückt: Wo swapArray ein Array per Zeiger erwartet, übergibst Du ihm einen Zeiger auf ein int (vermutlich willst Du da ein int-Array reinpacken).
Bei Folgendem siehst Du's wahrscheinlich:void f(TYP* x); ... TYP x; f(x);
Wenn es nicht gerade Übungszwecken dient und/oder wirklich unvermeidlich ist: Nimm std::vector und Du bist nicht nur Dein konkretes Problem los, sondern auch allen folgenden derselben Klasse und kannst Dich gleich dem eigentlichen Programmieren zuwenden....
übrigens: std::swap() gibt's auch schon für std::vector..
Gruß,
Simon2.
-
Danke für die schnellen Antworten. Ich glaube ich habe vor lauter Zeigern irgendwo Mist gebaut und mich immer weiter hinein gesteigert

Naja, ich denke ich versuche das mal mit einem "vector". Nur habe ich mich damit noch nicht befasst und denke das könnte etwas dauern. Vielleicht könnt ihr mir ja ein paar Tips geben, wie sich mein Problem (Zahl in Array umwandeln, inklusive umdrehen des Arrays damit die Zeichenkette richtig herum ist) mit vector lösen lässt.
Vielen Dank erstmal.
Mit freundlichen GrüßenMr Crown
-
Mr Crown schrieb:
Danke für die schnellen Antworten. Ich glaube ich habe vor lauter Zeigern irgendwo Mist gebaut und mich immer weiter hinein gesteigert

Naja, ich denke ich versuche das mal mit einem "vector". Nur habe ich mich damit noch nicht befasst und denke das könnte etwas dauern. Vielleicht könnt ihr mir ja ein paar Tips geben, wie sich mein Problem (Zahl in Array umwandeln, inklusive umdrehen des Arrays damit die Zeichenkette richtig herum ist) mit vector lösen lässt.
Vielen Dank erstmal.
Mit freundlichen GrüßenMr Crown
Du tust wahrscheinlich gut daran, wenn du dich zuerst einmal mit den Standard Container beschäftigst und erst ein wenig später dich mit Zeiger und Arrays rumschlägst.
Diese Seite hier ist Gold Wert:
http://www.cplusplus.com/reference/stl/Da findest du eigentlich alles über Container, Beispiele dazu, Algortihmen und vieles mehr.
Dein Problem lässt sich auf viele Arten lösen. Eine davon wäre, dass du die Zahl zuerst einmal in einen string umwandelst (mittels std::stringstream) und dann kannst du einen vector damit relativ einfach initialisieren.
#include <vector> #include <sstream> ... int zahl = 25; std::stringstream s; std::string str; s << zahl; s >> str; std::vector<char> v ( str.begin (),str.end() );Ob das die Reihenfolge ist, die du brauchst, kann ich nicht sagen, aber das war schon zu viel Code.

-
Ja Danke. Die Seite ist Gold wert.
Ich wollte das Problem eigentlich ohne Umwandlung in Stings lösen und sonstige Funktionen. Das mit dem swappen hat sich jetzt auch erledigt, da <vector> das ja mitbringt.
Danke.
-
So, habe mich etwas mit <vector> bescchäftigt. Bin jetzt soweit, dass alles klappt, bis auf ein kleines Problem, mit dem ich garnicht gerechnet hätte.
*zahl /= 10;Hier sagt er: 19 void value not ignored as it ought to be
Die gesamte Funktion sieht so aus:
#include <iostream> #include <conio.h> #include <vector> using namespace std; int inArray (vector<int> *vec, int *zahl) { int b=0, c=0, i=0; do { b = *zahl / 10; b *= 10; (*vec).push_back( *zahl-b ) *zahl /= 10; // Hier ist die Fehlermeldung c++; } while (*zahl != 0); *zahl = c; return *vec, *zahl; }2. Wie kann ich jetzt die Reihenfolge der Elemente in dem vector umdrehen ?
Wäre super, wenn sich noch mal jemand etwas Zeit nehmen könnte. Danke.
Gruß Mr Crown
-
sieh dir mal den STL-Algorithmus 'revers' an. der dreht die Reihenfolge der Elemente eines STL-Containers um.
Tschüß
-
sorry, der Algorithmus heißt natürlich 'reverse'
-
Hmmm, mir ist nicht ganz klar, was DU überhaupt machen willst .. und dem Compiler anscheinend auch

Mr Crown schrieb:
...
*zahl /= 10;...
die Variable "zahl" ist ein Zeiger auf einen Vektor, der int's verwaltet.
Was soll denn passieren, wenn Du den Vektor "durch 10 teilst" ?
Ich vermute, dass Du noch zu sehr in "C-Array-Spezialitäten" denkst, bei denen man manchmal den Container (=Array) nehmen kann, wenn man eigentlich ein Element (üblicherweise das erste) meinte und anders herum.
Bei den Std-Containern ist das aber (glücklicherweise) entzerrt worden.Was auch nichts ist, ist:
... int inArray (... ... return *vec, *zahl;[/quote]
Was soll hier zurückgegeben werden? vec? zahl? Was soll passieren, wenn Du ein int und einen Vektor mit einem Komma verknüpfst?Mr Crown schrieb:
...
2. Wie kann ich jetzt die Reihenfolge der Elemente in dem vector umdrehen ?
...Auf der schon o.g. Seite gibt's so nette Sachen wie
reverse , reverse_copy oder
copy_backward
- und noch einen Haufen anderer "Standardlösungen" für solche Standardprobleme...Gruß,
Simon2.
-
Danke. Das klappt. Man bin ich blöd. Ich bin schon so genervt, dass ich im vorigen Post ein ";" (semikolon) vergessen habe und darum die Fehlermeldung kam.

Na jetzt ist alles super
Freu mich total.
Vielen Dank an alle, die mir geholfen haben.
Noch einen schönen Sonntag Abend und eine schöne Weihnachtszeit.
Gruß
Mr Crown