C++ Zeigerversuche

Hallo zusammen!
Hab gerade mal mit C++ angefangen und hab etwas herumprobiert.
Was muss ich im folgenden Beispiel ändern damit der komplette Eingabewert in main ausgegeben wird?
Mit der jetzigen Version bekomme ich ja nur das erste Zeichen.
besten Dank schon mal im Voraus
Gruß
Georg

#include 
using namespace std;

class CZeichenkette 
{
 public: 
 void gibZeichenkette(char \*zeichen);
 char holeZeichenkette(void);
 private: 
 char \*meineZeichen;
};

char CZeichenkette::holeZeichenkette() 
{
 return \*meineZeichen;
}

void CZeichenkette::gibZeichenkette(char \*zeichen) 
{
 meineZeichen= zeichen;
}

int main()
{
char eingabe\_zeichen[10]; 

cin \>\> eingabe\_zeichen; 

 CZeichenkette Kette; 
 Kette.gibZeichenkette(eingabe\_zeichen); 

 cout 

Hallo Georg,

> #include   
> using namespace std;  
>   
> class CZeichenkette  
> {  
> public:  
> void gibZeichenkette(char \*zeichen);




> // char holeZeichenkette(void);

// Hier musst du eine Zeichenkette zurückgeben, nicht nur ein
// einzelnes zeichen.
 char \*holeZeichenkette(void);



> private:  
> char \*meineZeichen;  
> };  
>   
> char CZeichenkette::holeZeichenkette()  
> {




> // return \*meineZeichen;

// Hier ist das selbe Problem:
// \*meineZeichen ist ein einzelnes Zeichen !!
 return meineZeichen;


> }  
>   
> void CZeichenkette::gibZeichenkette(char \*zeichen)  
> {  
> meineZeichen= zeichen;  
> }  
>   
> int main()  
> {  
> char eingabe\_zeichen[10];  
>   
> cin \>\> eingabe\_zeichen;  
>   
> CZeichenkette Kette;  
> Kette.gibZeichenkette(eingabe\_zeichen);  
>   
> cout


MfG Peter(TOO)

Hallo Peter,
Erst mal Danke!
Irgend was mache ich da wohl immer noch falsch;-(
Der Compiler zeigt mir die folgenden Fehler
das wesendlich hab ich mal kopiert (hoffe es fehlt nix)

……error C2556: ‚char CZeichenkette::holeZeichenkette(void)‘: Überladene Funktion unterscheidet sich nur hinsichtlich des Rückgabetyps von ‚char *CZeichenkette::holeZeichenkette(void)‘
……Siehe Deklaration von ‚CZeichenkette::holeZeichenkette‘

error C2040: ‚CZeichenkette::holeZeichenkette‘: ‚char (void)‘ unterscheidet sich von ‚char *(void)‘ in Bezug auf die Anzahl vorgenommener Dereferenzierungen

… C2264: ‚CZeichenkette::holeZeichenkette‘: Fehler in der Funktionsdefinition oder Funktionsdeklaration, Funktion nicht aufgerufen

Gruß
Georg

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Irgend was mache ich da wohl immer noch falsch;-(
Der Compiler zeigt mir die folgenden Fehler
das wesendlich hab ich mal kopiert (hoffe es fehlt nix)

……error C2556: ‚char CZeichenkette::holeZeichenkette(void)‘:
Überladene Funktion unterscheidet sich nur hinsichtlich des
Rückgabetyps von ‚char *CZeichenkette::holeZeichenkette(void)‘
……Siehe Deklaration von ‚CZeichenkette::holeZeichenkette‘

error C2040: ‚CZeichenkette::holeZeichenkette‘: ‚char (void)‘
unterscheidet sich von ‚char *(void)‘ in Bezug auf die Anzahl
vorgenommener Dereferenzierungen

Das bedeutet vermutlich, dass du in der Deklaration der Funktion das char gelassen hast, und in der Implementierung ein char* draus gemacht hast, oder umgekehrt. Wie auch immer: du hast zwei verschiedene Signaturen, und deswegen denkt der Compiler, es wäre eine überladene Funktion.

Grüße,
Moritz

Hallo Georg,

Irgendwie hast du noch keine Ahnung was du da tust !!

> > > #include   
> > > using namespace std;  
> > >   
> > > class CZeichenkette  
> > > {  
> > > public:  
> > > void gibZeichenkette(char \*zeichen);
> > 
> >   
> > 
> > > // char holeZeichenkette(void);
> > 
> > // Hier musst du eine Zeichenkette zurückgeben, nicht nur ein  
> > // einzelnes zeichen.  
> > char \*holeZeichenkette(void);  
> >   
> > 
> > > private:  
> > > char \*meineZeichen;  
> > > };  
> > >   
> > > char CZeichenkette::holeZeichenkette()

// muss lauten:
 char \*CZeichenkette::holeZeichenkette()



> > > {
> > 
> >   
> > 
> > > // return \*meineZeichen;
> > 
> > // Hier ist das selbe Problem:  
> > // \*meineZeichen ist ein einzelnes Zeichen !!  
> > return meineZeichen;  
> > 
> > > }  
> > >   
> > > void CZeichenkette::gibZeichenkette(char \*zeichen)  
> > > {  
> > > meineZeichen= zeichen;  
> > > }  
> > >   
> > > int main()  
> > > {  
> > > char eingabe\_zeichen[10];  
> > >   
> > > cin \>\> eingabe\_zeichen;  
> > >   
> > > CZeichenkette Kette;  
> > > Kette.gibZeichenkette(eingabe\_zeichen);  
> > >   
> > > cout

MfG Peter(TOO)

Hallo Peter,
jetzt hab ich’s kapiert.

Irgendwie hast du noch keine Ahnung was du da tust !!

ich fürchte das stimmt;-(

Da hilft wohl nur der bewährte Ansatz ÜBEN… .
Jedenfalls hast du mir prima weiter geholfen, danke!

Gruß
Georg

hallo Georg!

Eine Bitte noch: die Variablen immr beim Konstruktor initialisieren, besonders dann, wenn es Zeiger sind:

class CZeichenkette
{
 public
 CZeichenkette()); ////// 

Du hast sonst einen "wilden Zeiger", und glaube mir das, die können anders rabiat sein. Ohne die Initailisierung hat der Zeiger bloß Speichermüll dran, Du würdest dann auch diesen in der Funktion 


    char \* CZeichenkette::holeZeichenkette()


retournieren.

lg
Martin B