Как использовать указатель на шаблонный тип - PullRequest
0 голосов
/ 19 марта 2011

Прошу прощения за новичок в этом вопросе. Я не могу получить указатель на шаблонный тип для работы. Например, вот заголовочный файл:

#include "TemplatedClass.h"
using namespace std;
class PointList
{
public:
    PointList(TemplatedClass<Point> *p);
//snip
};

Это не кажется законным. Что я сделал не так? Спасибо!

edit добавление к примеру.

//TemplatedClass.h
template <class T>
class TemplatedClass
{
public:
    TemplatedClass();
    TemplatedClass(T *t);
    TemplatedClass(const TemplatedClass &t);
    ~TemplatedClass();
    T *getNode() const;
    void setNode(T *t);
private:
    T *node;
};

//TemplatedClass.cpp
#include "TemplatedClass.h"
template <class T>
TemplatedClass<T>::TemplatedClass()
{
    node = 0;
};
template <class T>
TemplatedClass<T>::TemplatedClass(T *t)
{
    node = t;
};
template <class T>
TemplatedClass<T>::TemplatedClass(const TemplatedClass &l)
{
// snip
};

Ответы [ 2 ]

3 голосов
/ 19 марта 2011

Необходимо указать определение класса Point, включив заголовок, в котором этот класс определен.Например:

#include "TemplatedClass.h"
#include "Point.h"   // if this header contains the Point's declaration
using namespace std;
class PointList
{
public:
    PointList(TemplatedClass<Point> *p);
//snip
};

РЕДАКТИРОВАТЬ

На самом деле, поскольку ваш метод принимает указатель, вы можете просто объявить:

template< typename T > class TemplatedClass;
class Point;
using namespace std;
class PointList
{
public:
    PointList(TemplatedClass<Point> *p);
//snip
};

, нозатем в исходный (cpp) файл необходимо включить эти заголовки

0 голосов
/ 19 марта 2011

Попробуйте переместить все определения шаблонов функций-членов из TemplatedClass.cpp в TemplateClass.hh.Все определения шаблонов должны быть в заголовочных файлах (упрощенно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...