我在尝试使用此模板进行编译时遇到一些问题,我认为问题出在Edge类上,在添加之前我很乐意编译。
首先,这应该是加权连通图的建模。每个图都有一个图表,其中包含系统中所有节点的集合,每个节点都是一个模板,它保存了类型为T的节点值(我用int和char测试过它)和一个边缘列表,边缘是与其他节点的连接,并具有另一个节点的权重和指针。
当我只有一个节点列表(图中)时,编译得很好,一切都很好。然后,当我添加Edges部分时,它只是不编译。可能是模板只是不喜欢它,当1指的是一个又反过来的时候?
我收到以下错误:(还有其他几个,但我确信它们只是错误结转)
C4430:缺少类型说明符 - int 假定。注意:C ++不支持 default-int edge.cpp 12
错误C2974:'std :: list':无效 '_Ty'的模板参数,类型 期望node.cpp 13
错误C2065:'Edge':未声明 标识符node.cpp 13
任何帮助都将非常感谢,如果有任何更多信息,我可以提供。
#ifndef GRAPH_CPP
#define GRAPH_CPP
#include "Node.cpp"
#include <list>
using namespace std;
template <typename T>
class Graph
{
private:
list< Node<T>* > nodes;
//bool (*compare) (T, T);
public:
Graph(){}
void addNodes(T nNode)
{
nodes.push_back( new Node<T>( nNode ) );
}
};
#endif
#ifndef NODE_CPP
#define NODE_CPP
#include <vector>
#include "Edge.cpp"
using namespace std;
template <typename T>
class Node
{
private:
list< Edge < T > > adjacencies;
T value;
public:
Node(T nVal)
{
value = nVal;
}
T getValue()
{
return value;
}
};
#endif //NODE_CPP
#ifndef EDGE_CPP
#define EDGE_CPP
#include "Node.cpp"
template <typename T>
class Edge
{
private:
Node<T>* node;
public:
Edge(){}
};
#endif
答案 0 :(得分:0)
我认为Edge的前向声明会在你的Node声明之前修复它。
template <typename T>
class Edge;
您可能需要为Edge with Node做同样的事情。
答案 1 :(得分:0)
Node和Edge紧密耦合。边缘应该首先“完整”,因为Node有list<Edge>
因此我不确定Edge是否可以在此时向前声明。 Edge有Node *所以肯定可以。
template< typename T > class Node;
template< typename T > class Edge
{
// define
};
template< typename T> class Node
{
// define
};