嵌套模板类中的C2143

时间:2011-06-12 13:37:42

标签: c++ templates

template <class T>
class Edge;

template <class T>
class Vertex;

template <class T>
class Vertex
{
    T key;
    char color;
    std::vector<Edge> adjVertices;
};

template <class T>
class Edge
{
    Vertex* source;
    Vertex* target;
};

给我排错:std::vector< Edge > adjVertices; error: error C2143: syntax error : missing ';' before '<' 请参阅正在编译的类模板实例化'ds::Vertex<T>'的引用。

我应该改变什么?

2 个答案:

答案 0 :(得分:3)

你必须

#include <vector>

并更改

std::vector<Edge> adjVertices;

std::vector<Edge<T>> adjVertices;

同样适用于:

Vertex<T>* source;
Vertex<T>* target;

接下来,您将面临在Vertex之前定义Edge的问题。你应该改变订单。

答案 1 :(得分:1)

编译:

#include <vector>

template <class T>
class Edge;

template <class T>
class Vertex;

template <class T>
class Vertex
{
    T key;
    char color;
    std::vector<Edge <T> > adjVertices;
};

template <class T>
class Edge
{
    Vertex <int> * source;
    Vertex <int> * target;
};