2010-11-20 37 views
0

J'ai mis en œuvre la classe suivantegraphique héritage

class graph { 
    friend ostream& operator<< (ostream&, graph&); 
public: 
    graph() { } 
    ~graph() { clearMap(); } 

    class node { 
     friend ostream& operator<< (ostream&, const graph::node&); 
    public: 
     node() { } 
     node(const node&); 
     node(luint inID) { ID = inID; } 
     virtual ~node() { neighbors.clear(); } 

     node& operator=(const node&); 
     void addNeighbor(luint); 
     void addNeighbor(const std::vector<luint>&); 

     luint ID; 
     std::vector<luint> neighbors; 
    }; 

    void addNode(const node&); 
    void addNode(const node*); 
    void addNode(luint); 
    void readFile(const char *); 
    void clearMap(); 

    void randGeom(luint, double); 
    void connRandGeom(luint, double); 
    bool isConnected(); 


protected: 
    std::map<luint, node*> nodeMap; 
}; 

et a créé une nouvelle, héritée du graphique

class colorGraph : public graph { 
public: 
    colorGraph() { } 
    ~colorGraph() { } 

    class colorNode : public graph::node { 
    public: 
     colorNode() { } 
     ~colorNode() { } 

     luint color; 
    }; 
}; 

Cependant, le programme principal qui suit ne trouve pas le bon fonctionnement:

int main() { 
    pColorGraph myGraph; 
    myGraph = new colorGraph(); 
    myGraph->isConnected(); 
    return 0; 
} 

Symboles non définis:
"graphique :: isConnected()", référencé de: _main dans main.o ld: symbole (s) non trouvé collect2: ld retourné 1 sortie état

quelqu'un peut me dire ce que je fais faux?

Merci,

+1

Vous n'avez jamais réellement écrit l'implémentation de 'graph :: isConnected()'? – EboMike

Répondre

0

La fonction n'a aucune implémentation! C'est juste l'en-tête de celui-ci.

+0

ne devrait-il pas être dérivé du graphique? – Bob

+0

Je vois, je n'ai pas inclus graph.cpp. Résolu. – Bob

0

Inclus graph.cpp. Résolu

+1

graph.cpp ne doit pas être inclus via '# include', si c'est ce dont vous parlez. Il doit être compilé séparément, puis lié avec 'main.o' lors de la création de l'exécutable (par exemple, lors de la compilation avec GCC:' g ++ graph.o main.o -o main'). Voir ["Quelles sont les conventions pour les en-têtes et les fichiers cpp en C++?"] (Http://stackoverflow.com/questions/540140/what-is-the-conventions-for-headers-and-cpp-files-in- c) et recherchez des informations sur la phase de liaison pour en savoir plus sur le sujet. – outis

0
  1. Qu'est-ce que "pColorGraph" dans votre code?
  2. Avez-vous une implémentation pour "isConnected()" dans "class graph"?