无法在C ++中实现图类

时间:2018-12-31 20:09:01

标签: c++ graph

对于使用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;
};

1 个答案:

答案 0 :(得分:1)

  

每个边都有一个值,即开始节点和结束节点。每个节点都有一个整数   识别它以及包含离开它的边缘的向量。

这是多余的,因此将使您感到悲伤。如果将节点存储在边缘中,则不应将边缘存储在节点中。反之亦然。