2011-11-01 1 views
2

Je travaille sur ce programme, mais chaque fois que je tente de construire, je reçois ces messages d'erreur:Pas sûr du placement de Typedef et classe

 
|41|undefined reference to `Gumball::Gumball()' 
obj\Debug\main.o||In function `main':| 
|24|undefined reference to `Gumball::Gumball()' 
|24|undefined reference to `Gumball::Gumball()' 
obj\Debug\main.o||In function `Z10eatgumballR5StackR7Gumball' 
|102|undefined reference to `Gumball::Gumball()' 
obj\Debug\Node.o||In function `Node': 
|4|undefined reference to `Gumball::Gumball()' 
|4|more undefined references to `Gumball::Gumball()' follow 
||=== Build finished: 6 errors, 0 warnings ===| 

Je ne suis pas sûr de ce que la cause de ces messages d'erreur sont depuis que j'ai la classe Gumball déclarée à l'intérieur de ma classe Node et

#include "Node.h" dans ma classe Stack et "#include "Stack.h" dans ma principale. Toute suggestion serait appréciée.

mon fichier Node.h ressemble à ceci:

#ifndef NODE_H 
#define NODE_H 

#include <iostream> 
using namespace std; 

class Gumball { 
    public: 
     Gumball(); 
     string color; 
     int counter; 
}; 

typedef Gumball Type; 

// Interface file - Node class definition 
class Node { 
    public: 
     Node(); 
     Type x; 
     Node *n; 
     Type getinfo(); 
     Node *getnext(); 
     void setinfo(Type x); 
     void setnext (Node *n); 
    private: 
     Type info; 
     Node *next; 
}; 

#endif // NODE_H 

et mon fichier Stack.h ressemble à ceci:

constructeur

#ifndef STACK_H 
#define STACK_H 

#include "Node.h" 

typedef Gumball Type; 

// Interface file - Stack class definition 
class Stack { 
    public: 
     Stack(); 
     ~Stack(); 
     void push(Type); 
     Type pop(); 
     bool isempty(); 
     //Type size(); 
     void print(); 
    private: 
     Node *top; 
}; 

#endif // STACK_H 
+0

Vous n'avez pas besoin de 'typedef' dans' Stack.h' car c'est dans 'Node.h', que vous incluez. –

+3

N'utilisez pas 'using namespace' dans un fichier d'en-tête. –

+0

sans utiliser l'espace de noms, il ne reconnaît pas la chaîne en tant que type – 123me

Répondre

2

Where is the Gumball::Gumball() défini? Est-ce dans un fichier gumball.cpp? Sinon, essayez de le définir en ligne:

class Gumball { 
    public: 
     Gumball() {} 
+0

le constructeur est défini dans le fichier .cpp – 123me

+0

D'accord, votre étape de lien inclut-elle ce fichier .cpp dans la construction? Fondamentalement, l'erreur que vous avez montrée est une erreur de lien indiquant que l'éditeur de liens ne sait pas où trouver la définition de 'Gumball :: Gumball()'. –

+0

J'ai essayé d'utiliser la méthode inline pour définir le constructeur: class Gumball { public: Gumball() {color = "", counter = 0}; couleur de la chaîne; int compteur; }; mais j'obtiens un message d'erreur disant "error: expected"; avant '}' jeton – 123me

1

Avez-vous implémenté l'une des méthodes de classe? Tout ce que je vois est un tas de déclarations de classe.

+0

oui, ils sont tous mis en œuvre dans les fichiers .cpp. – 123me