0
我想要在C++中使用自定義標量對象來獲取STL地圖,以便我可以在OpenCV的地圖中使用標量類。我收到以下錯誤:在地圖拋出錯誤的C++自定義對象
error: ‘template class std::map’ used without template parameters
,這是使用模板IM:
template<typename _Tp> class MyScalar_ : public Scalar_<_Tp>{
public:
MyScalar_();
MyScalar_(Scalar_<_Tp>& s){
_s = s;
};
_Tp& operator[](const int idx){
return _s[idx];
}
//std::less<_Tp>::operator()(const _Tp&, const _Tp&) const
//this wont work if scalars are using doubles
bool operator < (const MyScalar_<_Tp>& obj) const {
double lhs,rhs;
lhs = _s[0] + _s[1] + _s[2] + _s[3];
rhs = _s[0] + _s[1] + _s[2] + _s[3];
return lhs > rhs;
}
bool operator == (const MyScalar_<_Tp>& obj) const{
bool valid = true;
for(int i = 0;i<_s.size();i++){
if(_s[i] != obj[i])
return false;
}
return valid;
}
private:
Scalar_<_Tp> _s;
};
我有std::map< MyScalar,Point > edgeColorMap;
在我的頭文件以及
上述狀態的錯誤該行:
auto tempit = edgeColorMap.find(s);
if(tempit != std::map::end){//found a color that this pixel relates to
失敗在我f聲明,我無法弄清楚爲什麼?
你爲什麼認爲'std :: map :: end'可以工作?另外,請閱讀[有關在C++標識符中使用下劃線的規則?](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in- AC-標識符)。 –
這很有趣,你說下劃線的東西,我只是跟着OpenCV中的C++ api做什麼! – L7ColWinters
那麼,唯一可以返回的東西是使用'()'的函數,因爲'end()'是一個非靜態成員函數,所以你需要在實例上調用它。另外請注意,並非所有的下劃線都是禁止的,在你的情況下'_Tp','MyScalar_'和'Scalar_'是禁止的。 –