C++ 嵌套模板类中的C2143 模板 类边缘; 模板 类顶点; 模板 类顶点 { T键; 炭色; 向量顶点; }; 模板 阶级边缘 { 顶点*源; 顶点*目标; };

C++ 嵌套模板类中的C2143 模板 类边缘; 模板 类顶点; 模板 类顶点 { T键; 炭色; 向量顶点; }; 模板 阶级边缘 { 顶点*源; 顶点*目标; };,c++,templates,C++,Templates,给我行中的错误:std::vectoradjVertices 错误:错误C2143:语法错误:缺少“;”在你必须做的事之前 template <class T> class Edge; template <class T> class Vertex; template <class T> class Vertex { T key; char color; std::vector<Edge> adjVertices; };

给我行中的错误:
std::vectoradjVertices
错误:错误C2143:语法错误:缺少“;”在你必须做的事之前

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;
};
#包括
改变

#include <vector>
std::向量顶点;

std::向量顶点;
这同样适用于:

std::vector<Edge<T>> adjVertices;
Vertex*源;
顶点*目标;
接下来,您将面临一个问题,
顶点
是在
之前定义的。你应该颠倒顺序。

你必须

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;
};
#包括
改变

#include <vector>
std::向量顶点;

std::向量顶点;
这同样适用于:

std::vector<Edge<T>> adjVertices;
Vertex*源;
顶点*目标;
接下来,您将面临一个问题,
顶点
是在
之前定义的。您应该颠倒顺序。

这将编译:

Vertex<T>* source;
Vertex<T>* target;
#包括
模板
类边缘;
模板
类顶点;
模板
类顶点
{
T键;
炭色;
向量顶点;
};
模板
阶级边缘
{
顶点*源;
顶点*目标;
};
这将编译:

Vertex<T>* source;
Vertex<T>* target;
#包括
模板
类边缘;
模板
类顶点;
模板
类顶点
{
T键;
炭色;
向量顶点;
};
模板
阶级边缘
{
顶点*源;
顶点*目标;
};

+1同样,对于C++03,在>>之间应该有一个空格:
std::vector adj顶点
@dark\u charlie:除非您的C++03编译器支持将其作为扩展。MSVS>=2005(OP的编译器)。@ YBangalbul:为什么不只是添加空间使其有效C++而不依赖于特定的编译工具?@ Tomalak:出于意识形态原因。它必须在C++98中有效,但一些供应商认为他们负担不起。@ybungalobill:我不这么认为。+1另外,对于C++03,在>>之间应该有一个空格:
std::vector adj顶点
@dark\u charlie:除非您的C++03编译器支持将其作为扩展。MSVS>=2005(OP的编译器)。@ YBangalbul:为什么不只是添加空间使其有效C++而不依赖于特定的编译工具?@ Tomalak:出于意识形态原因。它必须在C++98中有效,但一些供应商认为他们负担不起。@ybungalobill:我不明白。