C2143 в классе вложенных шаблонов - PullRequest
0 голосов
/ 12 июня 2011
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 ]

3 голосов
/ 12 июня 2011

Вы должны

#include <vector>

и изменить

std::vector<Edge> adjVertices;

до

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

То же самое относится к:

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

Далее вы столкнетесь с проблемой, что Vertex определен до Edge Вы должны отменить заказ.

1 голос
/ 12 июня 2011

Это компилируется:

#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;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...