Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Klasse - Methode Rückgabetyp Zeiger

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.05.2004, 20:25 Uhr
~Pekingente
Gast


Turm von Hanoi:

Bräuchte Hilfe bei einer Kleinigkeit.

Ich habe eine Klasse Stack, diese enthält eine Strucktur Element im Privatebereich. Eine der öffentlichen Methoden soll jetzt einen Adresse vom Typ Element zurückgeben, ich bekomme allerdings Fehler beim Funktionskopf. Kann mir jemand vielleicht sagen, ob es vom Syntax richtig ist, ob der Stern * an der richtigen Stelle steht.

Danke!!

Auszug aus der Klasse: Stack



C++:
public:
Element * get_adress(Stack * stange_1 ,Stack * stange_2 , Stack * stange_3, int * scheiben_nr);



Auszug vom Funktionskopf:

Hier tritt der Fehler auf:

C++:
Element *Stack::get_adress(Stack * stange_1 ,Stack * stange_2 ,        Stack * stange_3, int * scheiben_nr)
{
     //code
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.05.2004, 20:29 Uhr
Pablo
Supertux
(Operator)


Und welcher Fehler tritt dann auf?
Ich sehe da nix falsches.

Kann es sein, dass du etwas zurücklieferst, dass nur innerhalb der Funktion Gültigkeit hat?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 06.05.2004 um 20:30 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.05.2004, 20:39 Uhr
~Pekingente
Gast


Danke für die schnelle Antwort

Hier ist meine Headder datei


C++:
#ifndef _STACK_H_
#define _STACK_H_

class Stack
{    
    private:
        struct Element
        {
            int value;
            Element * next;
            Element * previous;
        };

        ///Attribute
        int count;
        Element * first;
        Element * last;
    
    public:
        Stack(void);                        ///Konstruktor
        Stack(int anzahl, int daten[]);        ///Spez. Konstruktor
        Stack(const Stack & d);                ///Kopier Konstruktor
        ~Stack(void);                        ///De-Struktor
        
        ///Methoden
        void push(int value);                    
        int pop(void);                
        int top(void) const;                
        int size(void) const;                    
        bool isEmpty(void) const;            
        bool isFull(void) const;            
        void dumpForward(void) const;        
        void dumpBackward(void) const;        

        ///Eigene Funktionen
        void bildschirm_ausgabe(Stack * ,Stack * ,Stack * );
        bool gewonnen(Stack * ,Stack * );
        bool verschieben (Stack *  ,Stack *  ,Stack * ,
                          int * nr, int * ziel_stange, int * quelle_stange);
        bool spielzug_erlaubt (Stack * stange_1 ,Stack * stange_2 ,Stack * stange_3,
                              int * nr, int * ziel);
        Element * get_adress(Stack * stange_1 ,Stack * stange_2 ,
                             Stack * stange_3, int * scheiben_nr);
    

};
#endif /*_STACK_H_*/



In dieser Zeile bekommen ich folgende Fehler:

1. Fehler
stack.cpp(570) : error C2143: Syntaxfehler : Fehlendes ';' vor '*'

das kann aber nicht stimmen, da die Methode über dieser absolut korrekt ist

2. Fehler:
stack.cpp(570) : error C2501: 'Element' : Fehlende Speicherklasse oder Typbezeichner

3. Fehler:
stack.cpp(572) : error C2501: 'get_adress' : Fehlende Speicherklasse oder Typbezeichner

4. Fehler:
stack.cpp(572) : error C2556: 'int *__thiscall Stack::get_adress(class Stack *,class Stack *,class Stack *,int *)' : Überladene Funktion un

5. Fehler:
stack.cpp(572) : error C2371: 'get_adress' : Neudefinition; unterschiedliche Basistypen

Die Fehler 1-3 sind in der unten angegebenen Zeile. Die Fehler 4 und 5 sind sind in der Zeile der geschweiften Klammer "{"



C++:
Element *Stack::get_adress(Stack * stange_1 ,Stack * stange_2 ,
                            Stack * stange_3, int * scheiben_nr) // Fehler 1-3
{ //Fehler 4 u. 5
   // code
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.05.2004, 20:43 Uhr
Pablo
Supertux
(Operator)


Wenn Element struct private ist und du es in öffentlichen Elementen nutzt, kann es nicht funktionieren. Mach Element-struct public.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.05.2004, 20:53 Uhr
~Pekingente
Gast


Habe ich gemacht, ich bekomme immer noch die 5 Fehler


C++:
#ifndef _STACK_H_
#define _STACK_H_

class Stack
{    
    private:
    

        
    public:
        
        struct Element
        {
            int value;
            Element * next;
            Element * previous;
        };

        ///Attribute
        int count;
        Element * first;
        Element * last;
    

        Stack(void);                        ///Konstruktor
        Stack(int anzahl, int daten[]);        ///Spez. Konstruktor
        Stack(const Stack & d);                ///Kopier Konstruktor
        ~Stack(void);                        ///De-Struktor
        
        ///Methoden
        void push(int value);                    
        int pop(void);                
        int top(void) const;                
        int size(void) const;                    
        bool isEmpty(void) const;            
        bool isFull(void) const;            
        void dumpForward(void) const;        
        void dumpBackward(void) const;        

        ///Eigene Funktionen
        void bildschirm_ausgabe(Stack * ,Stack * ,Stack * );
        bool gewonnen(Stack * ,Stack * );
        bool verschieben (Stack *  ,Stack *  ,Stack * ,
                          int * nr, int * ziel_stange, int * quelle_stange);
        bool spielzug_erlaubt (Stack * stange_1 ,Stack * stange_2 ,Stack * stange_3,
                              int * nr, int * ziel);
        Element * get_adress(Stack * stange_1 ,Stack * stange_2 ,
                             Stack * stange_3, int * scheiben_nr);
    

};
#endif /*_STACK_H_*/

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.05.2004, 21:01 Uhr
Pablo
Supertux
(Operator)


Welche ist die Zeile 570 von stack.cpp ?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.05.2004, 21:04 Uhr
~Pekingente
Gast


Gleich in der ersten Zeile bekomme ich die Fehler.

C++:
Element *Stack::get_adress(Stack * stange_1 ,Stack * stange_2 ,
    Stack * stange_3, int * scheiben_nr)
{    
    ///Deklaration
    Element * ptr_adresse, * ptr_i;
    
    ///Definition
    ptr_adresse = ptr_i = NULL;
    
    ///Stange 1
    ptr_i = stange_1->first;
    
    while(ptr_i != NULL)
    {
        if (ptr_i->value == *scheiben_nr)
        {
            ptr_adresse = ptr_i;                    
        }
        ptr_i = ptr_i->next;  
    }
    
    ///Stange 2
    ptr_i = stange_2->first;
    
    while(ptr_i != NULL)
    {
        if (ptr_i->value == *scheiben_nr)
        {
            ptr_adresse = ptr_i;                    
        }
        ptr_i = ptr_i->next;  
    }

    ///Stange 3
    ptr_i = stange_3->first;
    
    while(ptr_i != NULL)
    {
        if (ptr_i->value == *scheiben_nr)
        {
            ptr_adresse = ptr_i;                    
        }
        ptr_i = ptr_i->next;  
    }

    return ptr_adresse;
}




Bearbeitung von Pablo:

Bitte, CPP Tags selber benutzen


Dieser Post wurde am 06.05.2004 um 21:15 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.05.2004, 21:14 Uhr
ao

(Operator)


Der Bezeichner Element existiert nicht im globalen Namensraum, sondern nur in Stack::, darum muss es heißen:

C++:
Stack::Element * Stack::get_Address ( .... )
{
    ...
}


Pablo hat aber recht, struct Element muss public bleiben, weil es keinen Sinn macht, etwas Privates nach draußen zu reichen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.05.2004, 21:16 Uhr
Pablo
Supertux
(Operator)


Stimmt, das habe ich nicht gemerkt (ich meine Stack::Element), weil ich die Structs immer außerhalb von Klassen definiere.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.05.2004, 21:19 Uhr
~Pekingente
Gast


Es funktioniert, vielen Dank und einen schönen Abend noch.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: