_
Tach!
Ich möchte den Inhalt einer deque in ein set übertragen. Das klappt versuchsweise mit einer deque<int>, aber nicht mit einem selbstgebauten Typ. Was mache ich falsch?
struct T_sum {
int r,g,b;
};
struct T_average {
int r,g,b;
int rgb;
};
struct T_maximum {
int r,g,b;
int rgb;
};
struct T_minimum {
int r,g,b;
int rgb;
};
struct T_ImageAnalysis {
T_ImageAnalysis() {
memset(&sum,0,sizeof(sum));
memset(&average,0,sizeof(average));
memset(&maximum,0,sizeof(maximum));
minimum.r=minimum.g=minimum.b=minimum.rgb=255;
outshining=0;
}
T_sum sum;
T_average average;
T_maximum maximum;
T_minimum minimum;
int outshining;
};
int main() {
try {
//geht wunderbar:
std::deque<int> deqInt;
deqInt.push_back(1);
deqInt.push_back(2);
std::set<int> setInt;
std::copy(deqInt.begin(),deqInt.end(),std::inserter(setInt,setInt.end()));
std::set<int>::iterator itIntPeak=--setInt.end();
//geht so gar nicht:
std::deque<T_ImageAnalysis> deqAn;
T_ImageAnalysis ia1,ia2;
deqAn.push_back(ia1);
deqAn.push_back(ia2);
std::set<T_ImageAnalysis> setAn;
std::copy(deqAn.begin(),deqAn.end(),std::inserter(setAn,setAn.end()));
std::set<T_ImageAnalysis>::iterator itAnPeak=--setAn.end();
//...
}
Fehlermeldungen:
1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::deque<_Ty,_Alloc> &,const std::deque<_Ty,_Alloc> &)": template-Argument für "const std::deque<_Ty,_Alloc> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
1> c:\devenv\microsoft visual studio 9.0\vc\include\deque(1349): Siehe Deklaration von 'std::operator <'
1> c:\devenv\microsoft visual studio 9.0\vc\include\functional(142): Bei der Kompilierung der Klassen-template der bool std::less<_Ty>::operator ()(const _Ty &,const _Ty &) const-Memberfunktion
1> with
1> [
1> _Ty=T_ImageAnalysis
1> ]
1> c:\devenv\microsoft visual studio 9.0\vc\include\set(48): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::less<_Ty>".
1> with
1> [
1> _Ty=T_ImageAnalysis
1> ]
1> c:\devenv\microsoft visual studio 9.0\vc\include\xtree(22): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_Tset_traits<_Kty,_Pr,_Alloc,_Mfl>".
1> with
1> [
1> _Kty=T_ImageAnalysis,
1> _Pr=std::less<T_ImageAnalysis>,
1> _Alloc=std::allocator<T_ImageAnalysis>,
1> _Mfl=false
1> ]
1> c:\devenv\microsoft visual studio 9.0\vc\include\xtree(63): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_Tree_nod<_Traits>".
1> with
1> [
1> _Traits=std::_Tset_traits<T_ImageAnalysis,std::less<T_ImageAnalysis>,std::allocator<T_ImageAnalysis>,false>
1> ]
1> c:\devenv\microsoft visual studio 9.0\vc\include\xtree(89): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_Tree_ptr<_Traits>".
1> with
1> [
1> _Traits=std::_Tset_traits<T_ImageAnalysis,std::less<T_ImageAnalysis>,std::allocator<T_ImageAnalysis>,false>
1> ]
1> c:\devenv\microsoft visual studio 9.0\vc\include\xtree(107): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_Tree_val<_Traits>".
1> with
1> [
1> _Traits=std::_Tset_traits<T_ImageAnalysis,std::less<T_ImageAnalysis>,std::allocator<T_ImageAnalysis>,false>
1> ]
1> c:\devenv\microsoft visual studio 9.0\vc\include\set(57): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_Tree<_Traits>".
1> with
1> [
1> _Traits=std::_Tset_traits<T_ImageAnalysis,std::less<T_ImageAnalysis>,std::allocator<T_ImageAnalysis>,false>
1> ]
1> c:\develop\testcon08\main.cpp(77): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::set<_Kty>".
1> with
1> [
1> _Kty=T_ImageAnalysis
1> ]
1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)": template-Argument für "const std::vector<_Ty,_Alloc> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
1> c:\devenv\microsoft visual studio 9.0\vc\include\vector(1322): Siehe Deklaration von 'std::operator <'
1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)": template-Argument für "const std::_Tree<_Traits> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
1> c:\devenv\microsoft visual studio 9.0\vc\include\xtree(1466): Siehe Deklaration von 'std::operator <'
1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)": template-Argument für "const std::basic_string<_Elem,_Traits,_Alloc> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
1> c:\devenv\microsoft visual studio 9.0\vc\include\string(150): Siehe Deklaration von 'std::operator <'
1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const _Elem *,const std::basic_string<_Elem,_Traits,_Alloc> &)": template-Argument für "const _Elem *" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
1> c:\devenv\microsoft visual studio 9.0\vc\include\string(140): Siehe Deklaration von 'std::operator <'
1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const std::basic_string<_Elem,_Traits,_Alloc> &)": template-Argument für "const std::basic_string<_Elem,_Traits,_Alloc> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
1> c:\devenv\microsoft visual studio 9.0\vc\include\string(130): Siehe Deklaration von 'std::operator <'
1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)": template-Argument für "const std::reverse_iterator<_RanIt> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
1> c:\devenv\microsoft visual studio 9.0\vc\include\xutility(2262): Siehe Deklaration von 'std::operator <'
1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)": template-Argument für "const std::_Revranit<_RanIt,_Base> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
1> c:\devenv\microsoft visual studio 9.0\vc\include\xutility(2072): Siehe Deklaration von 'std::operator <'
1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)": template-Argument für "const std::pair<_Ty1,_Ty2> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
1> c:\devenv\microsoft visual studio 9.0\vc\include\utility(99): Siehe Deklaration von 'std::operator <'
1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2676: Binärer Operator '<': 'const T_ImageAnalysis' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
EDIT: Schon gut, hab's gerafft. Der kann das struct logischerweise nicht vergleichen (set) und ich muss 'nen Funktor definieren...