2009-12-12 3 views
1
class Newstring 
{ 
public: 
    Newstring(); 
    void inputChar (char); 
    void display(); 
    int length(); 
    void concatenate (char); 
    void concatenate (Newstring); 
    bool substring (Newstring); 
    void createList(); 
    Node * getHead(); // error 
private: 
    struct Node 
    { 
     char item; 
     Node *next; 
    }; 
    Node *head; 

}; 

Je reçois une erreur de syntaxe : missing ';' avant '*' sur la déclaration pour ma fonction getHead (oui je ne peux pas penser à un meilleur nom). Le but de cette fonction est de retourner le pointeur de la tête.Comment écrire une fonction publique pour renvoyer un pointeur de tête d'une liste chaînée?

+0

Ok, je l'ai eu. J'ai juste échangé les blocs privés et publics autour. Merci tout le monde! – Brandon

+0

Notez que vous pouvez avoir plusieurs blocs private/protected/public. – peterchen

Répondre

3

Déclarez le noeud avant de l'utiliser.

1
Node * getHead() 

compilateur n'est pas en mesure d'obtenir la définition de Node est rencontrée lors getHead().

struct Node 
    { 
     char item; 
     Node *next; 
    }; 

Mettez la définition de nœud avant de l'utiliser.

class Newstring 
{ 
private: 
    struct Node 
    { 
     char item; 
     Node *next; 
    }; 
    Node *head; 
public: 
    Newstring(); ... 
    Node * getHead(); 
2

Vous devez déclarer la structure de noeud au-dessus de getHead();

class Newstring 
{ 

public: 
    struct Node 
    { 
     char item; 
     Node *next; 
    }; 
    Newstring(); 
    void inputChar (char); 
    void display(); 
    int length(); 
    void concatenate (char); 
    void concatenate (Newstring); 
    bool substring (Newstring); 
    void createList(); 
    Node * getHead(); // error 
private: 

    Node *head; 

}; 
+0

Existe-t-il un moyen de le faire en gardant la structure privée? – Brandon

+0

Définir dans un bloc privé. –

+0

Brandon> vous pouvez simplement déclarer la structure, ajouté une réponse pour montrer comment. – Klaim

2

Pour répondre à Brandon à garder la struct en privé ou en gardant le code actuel, tout en ajoutant une déclaration, la voie est:

class Newstring 
{ 
    struct Node; // here the declaration 
public: 

    Newstring(); 
    void inputChar (char); 
    void display(); 
    int length(); 
    void concatenate (char); 
    void concatenate (Newstring); 
    bool substring (Newstring); 
    void createList(); 
    Node * getHead(); // error 
private: 
    struct Node 
    { 
     char item; 
     Node *next; 
    }; 
    Node *head; 

}; 
1

Une autre façon serait de transmettre déclarer Node en plaçant un struct avant Node

: 
    void createList(); 
    struct Node * getHead(); 
private: 
    struct Node 
    { 
     : 
+0

Cela conserve la convention de codage et rend le code plus clair –

Questions connexes