c++ - 在 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;
};
解决方案
每条边都有一个值,开始节点和结束节点。每个节点都有一个 int 来识别它和一个包含离开它的边的向量。
这是多余的,因此会让你感到悲伤。如果将节点存储在边中,则不应将边存储在节点中。反之亦然。
推荐阅读
- android - 在父视图和某个视图下方居中视图
- laravel - 如何在共享主机中使用 vue js 和 laravel 构建项目?
- laravel - Laravel Cashier 订阅精选帖子
- swift - 登录成功后切换到另一个屏幕
- email - Squirrelmail 问题:错误:无法完成请求。查询:选择“收件箱”
- c - 为什么这个程序输出 4?
- ios - 我将如何将 Office 365 登录与 iOS 集成
- php - 方法 Illuminate\Http\RedirectResponse::getData 不存在。登录页面后
- python - 如何对包含 NaN 的大型多维数组中的每个像素应用线性回归?
- javascript - 在 react native 中导入外部 javascript 库