C ++ шаблон + typedef - PullRequest
       6

C ++ шаблон + typedef

0 голосов
/ 21 декабря 2010

Что не так в следующем коде:

Point2D.h

template <class T> 
class Point2D 
{     
   private:
         T x;
         T y; 
   ... 
 };

PointsList.h

template <class T>
class Point2D;

template <class T>
struct TPointsList
{
    typedef std::vector <Point2D <T> > Type;
};

template <class T>
class PointsList
{
    private:
            TPointsList <T>::Type points;  //Compiler error
 ...
};

Я хотел бы создать новый тип пользователя TPointsListбез прямой спецификации типа ...

Ответы [ 5 ]

5 голосов
/ 21 декабря 2010

Добавить typename:

...
typename TPointsList<T>::Type points;
...

См. Зачем нам здесь имя типа?

4 голосов
/ 21 декабря 2010

вы пробовали использовать ключевое слово typename?

template <class T>
class Points2DList
{
    private:
            typename TPoints2DList <T>::Type points;  //using the typename keyword
 ...
};
2 голосов
/ 21 декабря 2010

Другие уже ответили на ваш вопрос, но я думаю, если вы хотите узнать , почему там требуется typename, то вы можете увидеть эту тему:

Использование ключевого слова typename с typedef и новым

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

Вопрос немного неясен, но кажется, что вы пытаетесь создать экземпляр вектора Point2D, не имея доступного определения шаблона Point2D. Попробуйте добавить #include "Point2D.h" в начало списка PointsList.h. Как уже упоминали другие респонденты, вы также пытаетесь использовать квалифицированный зависимый тип без typename, поэтому вы также должны добавить изменить строку

TPointsList <T>::Type points;  //Compiler error

до:

typename TPointsList <T>::Type points;
0 голосов
/ 21 декабря 2010

Что такое TPoints2DList? Это нигде не объявлено.

Теперь, когда TPoints2DList объявлено как struct, на него есть ссылка:

   private:
            struct TPointsList <T>::Type points;  //should compile now
...