在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(){}; ^~~~~~~~ 。\src\Graph.cpp:14:15:错误:“int&Graph::getNodes()”的原型与类“Graph”中的任何原型都不匹配 向量和图::getNodes(){ ^~~~~~~~ 在..\src\Graph.cpp:5:0中包含的文件中: ..\src\Graph.h:53:20:错误:候选项为:std::vector&Graph::getNodes() std::vector&getNodes(){}; ^~~~~~~~

在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(){}; ^~~~~~~~ 。\src\Graph.cpp:14:15:错误:“int&Graph::getNodes()”的原型与类“Graph”中的任何原型都不匹配 向量和图::getNodes(){ ^~~~~~~~ 在..\src\Graph.cpp:5:0中包含的文件中: ..\src\Graph.h:53:20:错误:候选项为:std::vector&Graph::getNodes() std::vector&getNodes(){}; ^~~~~~~~,c++,graph,C++,Graph,如果有人对如何修复这个错误,或者对更好的图形设计方法有任何建议,我将非常感谢您的输入 /* * Graph.h * * */ #ifndef GRAPH_H_ #define GRAPH_H_ #include <iostream> #include <string> #include <vector> template <class T> class Graph{ private: class Node; std::vecto

如果有人对如何修复这个错误,或者对更好的图形设计方法有任何建议,我将非常感谢您的输入

/*
 * 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_ */
/*
*图h
*
*
*/
#ifndef图_
#定义图_
#包括
#包括
#包括
模板
类图{
私人:
类节点;
std::向量N;
阶级边缘{
T重;
节点*头;
节点*尾部;
};
类节点{
int-id;
标准::向量adjList;
公众:
Node(const int&name):id(name),adjList(){};
void addEdge(const int&name,T val){};
void removedge(const int&name){};
int&getID(){};
std::vector&getAdjList(){};
int nodePresent(const int&name){};
};
公众:
std::vector&getNodes(){};
无效附加值(常数int&st1、int&st2、T重量);
void addNode(常量int和名称);
int nodeCount();
};
#endif/*图*/
以及我的getNodes实现

template <class T>
vector<Node>& Graph<T>::getNodes(){
return this->N;
};
模板
向量和图::getNodes(){
返回此->N;
};
每个边都有一个值、开始节点和结束节点。每个节点都有一个int 识别它和包含离开它的边的向量


这是多余的,因此将导致您前进的痛苦。如果您将节点存储在边中,则不应将边存储在节点中。反之亦然。

您不会看到
{}
,在您的模板声明中像一个酸痛的拇指一样突出?正好在编译器错误消息中的行号处?您认为这会发生什么?当您定义一个内联类方法,然后在类之外再次定义它时会发生什么?您正在声明一组空的模板类方法。对于每个自尊心的C++编译器都在叫嚷从非虚函数中返回值。这应该是第一个线索:有些东西是错误的,然后第二个声明是第二个线索。“这是一种不同于所示代码中两种定义的返回类型。您是否在其他地方声明了它?欢迎这样做!您是在寻求错误方面的帮助,还是在寻求图形设计方面的帮助?每个问题都应该有一个问题,特别是当它们如此正交时。如果没有问题,则在我的实现过程中,我想知道错误是什么。我只是试图习惯于用C++编写,并想练习实现图形算法,所以我想设计一个我可以用来做这个的类。我改变了山姆指出的,但是我的错误仍然是一样的。它说Node没有在我的图形。CPP文件中定义。“vector&的模板参数无效,因为节点未在该范围内定义。如果某个地方没有冗余,如何快速找到所有连接的节点?无论如何,这似乎不能以任何方式回答问题,应该是一个注释。@海德你读过问题了吗?它说:“如果有人对如何修复这个错误,或者对设计图形的更好方法有任何建议,我将不胜感激。“您的答案并没有真正说明如何更好地实现它,只是说明了如何不实现它。这只是一个模糊的提示,只有在不需要逐个节点遍历图形时才适用。此外,OPs问题的这一部分在不了解需求的情况下似乎无法回答,因为实现图形的方法太多了。