我在C ++中为我的作业工作,我在定义多重方面遇到了一些问题。
我的图表类;
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 *);
};
和我的遍历课程;
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();
};
我的问题是在遍历类中,我需要同时声明Graph类,在图类中我需要遍历类来声明。
我的问题很严重:)你能帮我吗?
答案 0 :(得分:2)
前向声明会有所帮助,只需要做一下acceptTraverse(Traversal *),Visitor Pattern就可以帮到你了。
答案 1 :(得分:1)
在图表类中,在我添加的图表类减数之前
class BreadthFirst;
class DepthFirst;
并在 traversal.cpp 文件中使用了这个;
#include "Graph.h"
#include "Traversal.h"
有了这个,现在解决了很多问题;
错误8错误LNK2001: 未解决的外部符号“public: 虚拟课 的std :: basic_string的,类 std :: allocator&gt; __thiscall 遍历::遍历(类图const &安培)” (?横动@ @@遍历UAE?AV?$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@ ABVGraph @@@ Z) &安培; NBSP; C:\用户\ OBEN isik \ documents \ visual studio 2010 \项目\ HW2 \ HW2 \ main.obj
错误9错误LNK1120:1 未解析的外部c:\ users \ oben isik \ documents \ visual studio 2010 \ Projects \ hw2 \ Debug \ hw2.exe 1
我现在能做什么?
答案 2 :(得分:0)
不,您不需要类的定义。您只需要向Graph
和Traversal
为类的编译器提供提示。因此,在class BreadthFirst;
的定义中使用forward declartion之类的Graph
(我就在类{...}}之上。类似地,在遍历类的定义之前使用class Graph;
。
答案 3 :(得分:0)
在其中一个之前预先声明你的类,例如在Traversal头文件中,在遍历类之前你需要一个语句
类图;
然后它会知道Graph类将存在于某个时刻