2009-08-18 10 views
0

Ce qui suit est un fichier d'en-tête de liste chaînée:privé Noeud Ctor en difficulté LL

// list.h 
class list 
{ 
public: 
    list(void);    // constructor 
    virtual ~list(void); // destructor 
    void displayByName(ostream& out) const; 
    void displayByRating(ostream& out) const; 
    void insert(const winery& winery); 
    winery * const find(const char * const name) const; 
    bool remove(const char * const name); 

private: 
    struct node 
    { 
     node(const winery& winery);  // constructor 
     winery item; 
     node * nextByName; 
     node * nextByRating; 
    }; 

    node * headByName; 
    node * headByRating; 
}; 

la cteur cave a 4 param de la façon suivante:

// code in main.cpp 
// this statement is very important 
// I am trying to add the info to the list as a reference to the node ctor 
wineries->insert(winery("Lopez Island Vinyard", "San Juan Islands", 7, 95)); 

J'exécuter le code à ce jour. Je débogue et il me prend au ctor. J'utilise la liste init de ctor pour initialiser le membre privé varaibles.

//winery.cpp 
winery::winery(const char * const name, const char * const location, const int acres, const int rating) 
    : name(new char[strlen(name)+1]), location(new char[strlen(location)+1]), acres(0), rating(0) 
{ 
    // arcres, name, location, rating, are all private members of the winery class 

} 

nous allons à la chaînée:

//list.cpp 
void list::insert(const winery& winery) 
{ 
    list *ListPtr = new list(); 
// here im trying to add all the info to the list: 
    node *NodePtr = new node(winery); 

} 

J'obtiens une erreur d'éditeur de liens: LNK2019: symbole externe non résolu "public: __thiscall liste :: node :: node (cave classe const &)" (?? 0node @ list @@ QAE @ ABVwinery @@@ Z) référencé dans la fonction "public: void __thiscall list :: insert (classe win const const &)" (? Insert @ list @@ QAEXABVwinery @@@ Z)

parce que le noeud ctor est une structure qui est privée à la liste liée? list.cpp?

+0

Où la cave est-elle déclarée? Puis-je voir la déclaration? – jkeys

+0

#ifndef _WINERY_ #define _WINERY_ #include cave classe { public: \t cave (const char * nom const, emplacement const char * const, d'acres const int, note const int); \t virtual ~ cave (vide); \t const char * const getName() const; \t const char * const getLocation() const; \t const int getAccès() const; \t const int getRating() const; \t // rubriques d'affichage des listes des établissements vinicoles \t de displayHeadings static void (std :: ostream & out); \t ami std :: ostream & operator << (std :: ostream & out, cave * w); privé: \t omble \t * nom, \t omble \t * Lieu, \t int \t \t acres \t int \t \t notation; }; #endif – user40120

Répondre

2

où et comment avez-vous fourni l'implémentation pour le constructeur de node? il ne peut pas trouver

1

Soit vous avez oublié de définir (en plus de déclarant) le constructeur de list::node, ou vous avez oublié de lier le fichier objet produit à partir .cpp fichier avec la définition de ce constructeur dans votre application. Ceci:

node(const winery& winery); 

est seulement une déclaration, pas une définition (puisqu'il manque le corps).

3

Vous déclarer ce constructeur pour le noeud, mais pas d'autres constructeurs:

node(const winery& winery) 

Puis, plus tard, vous mettant en oeuvre un constructeur de cave, mais pas pour le noeud (qui est affiché):

winery::winery(const char * const name, const char * const location, const int acres, const int rating) 

Les fichiers sont compilés en raison de la déclaration, mais l'éditeur de liens échouera.

Vous ne voyez nulle part (dans le code que vous montrez) l'implémentation du constructeur pour le noeud. Quelque part, selon votre code, vous devez déclarer et implémenter un constructeur qui prend un winery comme argument. L'erreur indique que l'éditeur de liens ne peut pas trouver le constructeur approprié.

Questions connexes