2010-04-30 3 views
3

Je travaille pour mes devoirs en C++ et j'ai quelques problèmes avec les définitions de multiplication.problème avec les définitions de classe OOP

Ma classe de graphique;

class Graph{ 

    private: 
      string name;       //Graph name 
      fstream* graphFile;     //Graph's file 

    protected: 
    string opBuf;       //Operations buffer 
      int containsNode(string);    //Query if a node is present  
      Node* nodes;       //Nodes in the graph 
      int nofNodes;       //Number of nodes in the graph 

    public: 
      static int nOfGraphs;     //Number of graphs produced 

      Graph();        //Constructors and destructor 
      Graph(int); 
      Graph(string); 
      Graph(const Graph &); 
      ~Graph(); 

      string getGraphName();    //Get graph name 
      bool addNode(string);     //add a node to the graph 
      bool deleteNode(string);    //delete a node from the graph 
      bool addEdge(string,string);   //add an edge to the graph 
      bool deleteEdge(string,string);  //delete an edge from the graph 
      void intersect(const Graph&);   //intersect the graph with the <par> 
      void unite(const Graph&);    //intersect the graph with the <par> 
      string toString();     //get string representation of the graph 
     void acceptTraverse(BreadthFirst*); 
    void acceptTraverse(DepthFirst *); 


}; 

et ma classe de traversée;

class Traversal { 
public: 
string *visitedNodes; 

virtual string traverse (const Graph &); 
}; 

class BreadthFirst : public Traversal { 
public : 
BreadthFirst(); 
string traverse(); 
}; 

class DepthFirst : public Traversal { 
public : 
DepthFirst(); 
string traverse(); 
}; 

Mon problème est en classe traversal, je dois déclarer la classe graphique en même temps, en classe graphique i besoin classe traversal de déclarer.

J'ai de gros problèmes avec des décélations :) Pourriez-vous m'aider s'il vous plaît?

+1

Je voulais juste dire que vous n'avez vraiment pas besoin de commenter le code de cette façon. Chaque ligne de code devrait être explicite, et je pense que c'est vraiment dans votre cas, donc vous n'avez vraiment pas besoin de copier l'information. Les choses que vous devriez commenter sont des décisions, par ex. vous avez utilisé l'implémentation de graphe basé sur un objet de noeud (au lieu de l'objet de bordure ou de la matrice de bordure). –

Répondre

0

Non, vous n'avez pas besoin de la définition des classes. Vous avez juste besoin de donner l'indice au compilateur que Graph et Traversal sont des classes. Donc, utilisez forward declartion comme class BreadthFirst; dans la définition de Graph (juste au-dessus de la classe Graph {....}). De même, utilisez class Graph; avant la définition de classe Traversal.

0

avant Déclarez votre classe avant l'un d'eux, par exemple, dans le fichier d'en-tête Traversal, avant la classe traversal vous avez besoin d'une déclaration

classe graphique;

alors il connaîtra une classe graphique existera à un moment donné

2

avant la déclaration contribuerait, examiner juste faire acceptTraverse (Traversal *), le Visitor Pattern est quelque chose qui pourrait vous aider.

1

Si je comprenais vraiment, j'ai essayé ceci;

dans classe graphique, avant declerations classe graphique i ajouté

class BreadthFirst; 
class DepthFirst; 

et traversal.cpp fichier i utilisé ce;

#include "Graph.h" 
#include "Traversal.h" 

Avec cela, beaucoup de problèmes résolus mais pour l'instant;

Erreur 8 Erreur LNK2001: symbole externe non résolu "public: classe virtuelle std :: basic_string, classe std :: allocateur> __thiscall de traverse :: Traversal (classe graphique const &)" (? traverse @ Traversal @@ UAE? AV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocateur @ D @ 2 @@ std @@ ABVGraph @@@ Z) & nbsp; c: \ Users \ oben Isik \ documents \ Visual Studio 2010 \ Projects \ hw2 \ hw2 \ main.obj

Erreur 9 Erreur LNK1120: 1 externals non résolues c: \ users \ documents oben isik \ examples \ visuelle studio 2010 \ Projets \ hw2 \ Debug \ hw2.exe 1

Que puis-je faire maintenant?