模板类型未命中匹配

时间:2016-03-19 23:47:50

标签: c++ point-cloud-library

我有这段代码:

template <typename T>
struct ObjectPCD
{

    bool bcl;
    typename pcl::PointCloud<T>::Ptr pcd_object;

};

class SegmentingTool
{
public:
template <typename T>
    std::vector<ObjectPCD> classifyParts(typename std::vector<pcl::PointCloud<T> >* resultVec)
    {
     std::vector<ObjectPCD> rArt;
     return rArt;
     }
};

我不明白为什么会出现这个编译错误:

error: type/value mismatch at argument 1 in template parameter list for ‘template<class _Tp, class _Alloc> class std::vector’
  std::vector<ObjectPCD> classifyParts(typename std::vector<pcl::PointCloud<T> >* resultVec)

2 个答案:

答案 0 :(得分:2)

当你写:

std::vector<ObjectPCD>

std::vector需要第一个模板参数的类型。但是ObjectPCD不是类型 - 它是一个类模板:

template <typename T>
struct ObjectPCD { ... };

也许你的意思是:

std::vector<ObjectPCD<T>>

答案 1 :(得分:1)

您的通用代码存在严重错误。首先,typnename不应该在参数列表中。然后你也忘了将<T>添加到ObjectPCD(这会导致错误)。

以下是您的代码修复:

template <typename T>
    std::vector<ObjectPCD<T> > classifyParts(std::vector<pcl::PointCloud<T> >* resultVec)
    {
     std::vector<ObjectPCD<T> > rArt;
     return rArt;
     }