就我的研究而言,这似乎是一条路要走。
我必须抽象基类、GraphReader和Graph。
class Graph{
public:
Graph() {};
virtual ~Graph() {};
virtual void layout() = 0;
virtual std::vector<std::shared_ptr<Node>> getNodes() = 0;
virtual std::vector<std::shared_ptr<Edge>> getEdges() = 0;
protected:
};
class GraphReader{
public:
GraphReader(std::string fileName_) :
fileName(fileName_) {};
virtual ~GraphReader() {};
virtual Graph* read() = 0;
protected:
std::string fileName;
};
class OgdfGraph : public Graph{
public:
OgdfGraph();
virtual ~OgdfGraph();
void setOgdfGraph(ogdf::Graph &oGraph);
std::vector<std::shared_ptr<Node>> getNodes();
std::vector<std::shared_ptr<Edge>> getEdges();
void layout();
private:
[...]
};
class OgdfGmlReader : public GraphReader {
public:
OgdfGmlReader(std::string fileName);
virtual ~OgdfGmlReader();
Graph* read();
};
Graph* OgdfGmlReader::read() {
[...]
OgdfGraph og;
og.setOgdfGraph(G);
Graph* graph = &og;
return graph;
}
我主要做以下几点:
OgdfGmlReader tr = OgdfGmlReader("../data/lesmiserables.gml");
GraphReader* gr = &tr;
Graph* graph = gr->read();
graph->layout();
图形的加载工作正常,但当我在图形上调用layout函数时,会出现以下错误(在运行时,它会编译):
pure virtual method called
terminate called without an active exception
Aborted (core dumped)
我最困惑的是,它适用于GraphReader,但不适用于Graph(从GraphReader返回),因为这与我的理解完全相同。
非常感谢您对如何解决这个问题(同时可能维护继承架构)的任何帮助!