有向グラフを作成しようとしているので、Graph クラスを作成しました。これには、プライベート エッジ構造体とプライベート ノード構造体があります。エッジには、エッジが指すノードであるノード メンバーが必要です。ノードには、それらから離れたすべてのエッジのリストが必要です。
#ifndef DIRECTED_GRAPH_H
#define DIRECTED_GRAPH_H
#include <iostream>
#include <vector>
#include <string>
class Graph {
public:
Graph( const std::string & );
~Graph();
void print();
private:
struct GNode
{
std::string currency_type;
std::vector<GEdge> edges; // line 19
GNode( std::string name ) : currency_type( name ) {}
};
struct GEdge
{
int weight;
GNode * node; // node that the edge is pointed towards
GEdge( int weight, GNode* node ) : weight( weight ), node( node ) {}
};
GNode *source;
std::vector<GNode> nodes;
void add_node( const std::string & currency );
void add_edge( const GNode *& source, const GNode *& destination, int weight );
std::string bellman_ford( const GNode *&source );
};
#include "directed_graph.cpp"
#endif
問題は、宣言されている最初の構造体、この場合GNode
、存在することを認識していないGEdge
ため、コンパイラーにエラーが発生することです。
directed_graph.h:19: error: ISO C++ forbids declaration of ‘vector’ with no type
どうすればこれを回避できますか?