當我嘗試運行我的程序(在VS中)時出現以下生成錯誤:錯誤2676和2784(...無法推斷模板參數爲...)將結構向量插入集合時
Error 10 error C2676: binary '<' : 'const move' does not define this operator or a conversion to a type acceptable to the predefined operator
Error 4 error C2784: 'bool std::operator <(const _Elem *,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'const _Elem *' from 'const move'
Error 8 error C2784: 'bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)' : could not deduce template argument for 'const std::_Revranit<_RanIt,_Base> &' from 'const move'
Error 1 error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)' : could not deduce template argument for 'const std::_Tree<_Traits> &' from 'const move'
Error 3 error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'const move'
Error 5 error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'const move'
Error 6 error C2784: 'bool std::operator <(const std::move_iterator<_RanIt> &,const std::move_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::move_iterator<_RanIt> &' from 'const move'
Error 9 error C2784: 'bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)' : could not deduce template argument for 'const std::pair<_Ty1,_Ty2> &' from 'const move'
Error 7 error C2784: 'bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'const move'
Error 2 error C2784: 'bool std::operator <(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : could not deduce template argument for 'const std::vector<_Ty,_Alloc> &' from 'const move'
我不知道它們爲什麼會發生,因爲我沒有在我的move
結構中定義任何運算符(見下文),也沒有任何運算符在我的代碼中導致它。
他們似乎通過此功能(這是從來沒有所謂的)原因造成的:
std::set<solution> solve(grid board, solution prev) {
std::set<solution> ret = {};
ret.insert(prev);
return ret;
}
我的typedef /結構被上面使用:
struct move {
public:
move(unsigned startX, unsigned startY, unsigned endX, unsigned endY) {
x0 = startX;
y0 = startY;
x1 = endX;
y1 = endY;
}
unsigned x0 : 4, y0 : 4, x1 : 4, y1 : 4;
};
typedef std::vector<std::vector<__int8>> grid;
typedef std::pair<__int8, __int8> point;
typedef std::vector<move> solution;
誰能告訴我這是爲什麼發生的,我能做些什麼來解決它?
提前致謝!
您正在使用'set',它是'set >'。 'std :: set'被排序,因此它需要'operator <'。然後'std :: vector'將它傳遞給'move'。 –