Zeiger
-
#include<iostream> #include<string> using namespace std; string klaus(char *); string eins; string drei; char zwei='d'; int main() { eins=klaus(zwei); return 0; } string klaus(char *vari) { drei = "sommer"; return drei; }
OK.. ich hebe jetzt greue Haare bekommen denn ich seh den Fehlernicht... es soll einfach nur die adresse einer variablen in die funktion übergeben werden... nix anderes... aber es läuft nicht...
*Fehlermeldung: error C2664: 'klaus': Konvertierung des Parameters 1 von 'char' in 'char ' nicht möglich
-
deine funktion "klaus" erwartet nen zeiger auf nen char
string klaus(char *);
und du gibst ihn nen char
char zwei='d'; eins=klaus(zwei);
also zB einfach
string klaus(char); string klaus(char vari) { drei = "sommer"; return drei; }
edit/ mal so btw .. warum bekommt deine funktion nen char wenn sie den nicht benutzt?
-
Warum gleich ergrauen? Dies ist doch eine der wenigen Fehlermeldungen aus VC die wirklich sagen was sie meinen.
Du übergibst ein char (= 1 Byte) als String (= viele Bytes). char* wäre "d" mit abschließender 0. char ist einfach nur 'd'. Geht halt nicht.
Definiere char* zwei = "D" und die Welt sollte in Ordnung sein.
Edit: Verdammt, zu langsam.
-
Die Variable zwei ist ein char und damit ein einzelnes Zeichen. Die Funktion erwartet aber einen char-Pointer, der eine Zeichenkette bzw allgemeiner einen Vektor von Zeichen im Speicher darstellen kann.
eins = klaus(&zwei);
...würde die Adresse der Variablen zwei übergeben.
-
ok.. schreib mal bitte den text so um das es mit dem Zeiger funktioniert.. also ich will ja das der Zeiger get .... also gibt ihmbitte den Zeiger
-
Manfred Schmidtke schrieb:
Edit: Verdammt, zu langsam.
Das hätte man auch ohne Rechtfertigung gesehen
-
Makconner schrieb:
ok.. schreib mal bitte den text so um das es mit dem Zeiger funktioniert.. also ich will ja das der Zeiger get .... also gibt ihmbitte den Zeiger
Was möchtest du sagen?
meinst du sowas ->#include<iostream> #include<string> using namespace std; string klaus(char* ); string eins; string drei; char *zwei="d"; int main(){ eins=klaus(zwei); return 0; } string klaus(char* vari) { drei = "sommer"; return drei; }
wobei ich mich immernoch nach dem Sinn frage.....
-
Makconner schrieb:
ok.. schreib mal bitte den text so um das es mit dem Zeiger funktioniert.. also ich will ja das der Zeiger get .... also gibt ihmbitte den Zeiger
Kannst du auch deutsch reden? Ist schwer, ne?
überleg dir erst WAS du willst bevor die ne "befehls" lösung haben willst
du hast eine fkt die einen STRING zurückgeben soll. Ist ja auch oki, da die Variable "eins" auch ein string ist. Übergeben kannst du einen string oder ein char+ oder was auch immer, musst halt wissen, was du übergeben willst, damit du etwas verarbeiten kannst, damit du was zurückgibts
was soll das heissen??????
das der Zeiger get .... also
und was soll das? text? code? funktion? übergabeparameter????
bitte den text so um
wenn du einen zeiger z.b. übergeben willst, musst halt
z.b.string klaus(char *);
machen.
-
der quellcode hat keinen sinn... ich will nur den Teil mit dem Zeiger verstehen
-
Danke das reicht mir... sorry aber ich bin kein so guter Programmierer... und danke für die vielen netten Worte... und sorry das ich nicht auf Eurem Level schwebe... ich dachte immer Fragen kostet nichts.. war ne falsche Annahme... hier wird man ja gleich zusammengeschissen ...
Vielen Dank auch
PS: muss ja richtig Spass machen den Anfängern zu sagen was sie für Idioten sind, Oder?
-
masterofx32 schrieb:
[...]
eins = klaus(&zwei);...würde die Adresse der Variablen zwei übergeben.
Da ist es doch, damit es funktioniert. Und die Lösung, aus zwei auch einen Pointer zu machen, kam auch schon!?!?
-
@truebool , masterofx32 danke...
-
Nun strotzte deine zweite Mitteilung hier auch nicht gerade vor Höflichkeit, abgesehen davon, dass die vielen Fehler diese nicht gerade verständlich gemacht haben. Wenn Dir hier Leute versuchen zu helfen, so tun die das ausschließlich aus Freundlichkeit und nicht um jemanden nieder zu machen (abgesehen sicherlich von ein paar Ausnahmen).
Zum Thema:
Vielleicht verwirrt dich hier einfach char und char* ?Alle Definitionen mit * enthalten nicht den Inhalt sondern nur einen Zeiger auf diesen Inhalt. char ist eigentlich nur ein numerischer Wert, der 0 bis 255 annehmen kann. Man kann auch ein Zeichen mit einfachen Anführungszeichen übergeben. Gleichzeitig kann man mit dem Ding auch rechnen. So würde in deinem Beispiel zwei++ einfach 'e' ergeben. Entsprechend kann die Funktion klaus nichts damit anfangen.
char* ist ausschließlich für Zeichenketten vorgesehen. Die Zeichenkette wird dabei immer mit dem Zeichen \0 abgeschlossen. Definierst Du also
char* zwei = "d";
zeigt zwei auf eine Zeichenkette "d\0". Damit ist zwei der erwartete Typ.
Verständlich?
-
jo... danke