模板类型未命中匹配

template type miss match

本文关键字:类型      更新时间:2023-10-16

我有这段代码:

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)

当你写:

std::vector<ObjectPCD>

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

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

也许你的意思是:

std::vector<ObjectPCD<T>>

泛型代码存在一些严重错误。首先,typnename不应该在参数列表中。然后你也忘了<T>添加到ObjectPCD(顺便说一下,这导致了错误)。

这是您的代码修复:

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