首页 > 解决方案 > 在 C++ 中实现图形类时遇到问题

问题描述

我对用 C++ 编写代码比较陌生,为了练习,我一直在实现不同的数据结构。我目前正在努力解决如何实现图表。我正在尝试实现一个有向图,它有两个抽象组件:边和节点。每条边都有一个值,开始节点和结束节点。每个节点都有一个 int 来识别它和一个包含离开它的边的向量。一个图由一个节点向量组成,我将其设为私有,因此只能通过我提供的方法更改该图,但是,我为访问节点向量而编写的函数头给了我一个我不明白的错误. 错误是

..\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;
};

标签: c++graph

解决方案


每条边都有一个值,开始节点和结束节点。每个节点都有一个 int 来识别它和一个包含离开它的边的向量。

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


推荐阅读