2016-03-19 40 views
0

我有這樣的代碼:模板類型小姐比賽

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) 
+0

刪除''typename''(類型名的std ::矢量> * resultVec)' ' – BrainStone

+0

@BrainStone,我試過了。同樣的錯誤。 :( – Samer

回答

2

當你寫:

std::vector<ObjectPCD> 

std::vector預計類型爲第一個模板參數。但是ObjectPCD不是一個類型 - 這是一個類模板:

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

也許你的意思是:

std::vector<ObjectPCD<T>> 

1

你的泛型代碼有一些嚴重的錯誤。首先typnename不應該在參數列表中。然後,您還忘記將<T>添加到ObjectPCD(這是由於這種方式導致的錯誤)。

這裏是您的代碼固定的:在此行``的std ::矢量 classifyParts

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

gcc編譯器抱怨std :: vector >,我將它改爲std :: vector >它工作! – Samer

+0

@Samer我通常使用不同的編譯器,我沒有這個問題,但我會更新我的答案,以解決這個問題。還請記住要upvote並接受我的答案,如果它解決了你的問題! – BrainStone

+0

抱歉的男人,巴里是第一個。 – Samer