Переменная typedef в C ++ - PullRequest
0 голосов
/ 24 марта 2012

я хочу спросить о переменной typedef в C ++

хорошо, сейчас я использую PCL и хочу разделить код на .h и .cpp

вот мой .hfile

template <typename PointType>
class OpenNIViewer
{
public:
    typedef pcl::PointCloud<PointType> Cloud;
    typedef typename Cloud::ConstPtr CloudConstPtr;

    ...
    ...

    CloudConstPtr getLatestCloud ();

    ...
    ...
};

затем определение getLatestCloud () для другого файла .cpp

template <typename PointType>
CloudConstPtr OpenNIViewer<PointType>::getLatestCloud ()
{
    ...
}

, затем я получил ошибку C4430, потому что он не распознает тип возвращаемого значения CloudConstPtr

извините за глупый вопрос: D

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

CloudConstPtr является вложенным типом, поэтому вам необходимо указать его также в области действия:

template <typename PointType>
typename OpenNIViewer<PointType>::CloudConstPtr OpenNIViewer<PointType>::getLatestCloud ()
{
    ...
}

Но тогда все равно не сработает: это потому, что вы определили его в .cpp файле. В случае шаблона определение должно быть доступно в самом файле .h. Самый простой способ сделать это - определить каждую функцию-член в самом классе. Не пишите .cpp файл.

1 голос
/ 24 марта 2012

Изменить getLatestCloud на:

template <typename PointType>
typename OpenNIViewer<PointType>::CloudConstPtr
OpenNIViewer<PointType>::getLatestCloud ()
{
    ...
}

При чтении CloudConstPtr компилятор еще не знает, в какую область он должен заглядывать, поэтому его необходимо уточнять.

...