对于使用C ++编写代码,我还比较陌生,而对于实践,我一直在实现不同的数据结构。我目前正在努力实现图形。我正在尝试实现一个有向图,该图具有两个抽象组件:边和节点。每个边都有一个值,开始节点和结束节点。每个节点都有一个可以识别它的整数和一个包含离开它的边的向量。一个图由节点的向量组成,我将其设为私有,以便只能通过我提供的方法来更改该图,但是,为访问节点的向量而编写的函数头给了我一个我不明白的错误。错误是
..\src\Graph.cpp:14:15: error: prototype for 'int& Graph<T>::getNodes()' does not match any in class 'Graph<T>'
vector<Node>& Graph<T>::getNodes(){
^~~~~~~~
In file included from ..\src\Graph.cpp:5:0:
..\src\Graph.h:53:20: error: candidate is: std::vector<Graph<T>::Node>& Graph<T>::getNodes()
std::vector<Node>& getNodes(){};
^~~~~~~~
如果有人对如何解决此错误有任何建议,或者对设计图形有更好的建议,我将不胜感激。
/*
* Graph.h
*
*
*/
#ifndef GRAPH_H_
#define GRAPH_H_
#include <iostream>
#include <string>
#include <vector>
template <class T>
class Graph{
private:
class Node;
std::vector<Node> N;
class Edge{
T weight;
Node* head;
Node* tail;
};
class Node{
int id;
std::vector< Edge > adjList;
public:
Node(const int& name):id(name), adjList(){};
void addEdge(const int & name, T val){};
void removeEdge(const int& name){};
int& getID(){};
std::vector< Edge >& getAdjList(){};
int nodePresent(const int& name){};
};
public:
std::vector<Node>& getNodes(){};
void addEdge(const int& st1, int& st2, T weight);
void addNode(const int& name);
int nodeCount();
};
#endif /* GRAPH_H_ */
和我的getNodes实现
template <class T>
vector<Node>& Graph<T>::getNodes(){
return this->N;
};
答案 0 :(得分:1)
每个边都有一个值,即开始节点和结束节点。每个节点都有一个整数 识别它以及包含离开它的边缘的向量。
这是多余的,因此将使您感到悲伤。如果将节点存储在边缘中,则不应将边缘存储在节点中。反之亦然。