Forum » Programiranje » [C++] std::sort problem
[C++] std::sort problem
nejck ::
Pozdravljeni...
torej imam sledeč problem...
Rad bi sortiral vektor CPoint-ov glede na x koordinate tocke. Preiskal sem ze google ter msdn, in vse kar mi je uspelo je:
povsod sem našel podatek, da naj bi to delovalo, a nekako mi to ne uspe....
Compiler mi javi error in sicer:
1>risanje.cpp(58) : error C3867: 'CRisanje::CPointPrimerjaj': function call missing argument list; use '&CRisanje::CPointPrimerjaj' to create a pointer to member
1>risanje.cpp(58) : error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided
1> d:\program files\microsoft visual studio 8\vc\include\algorithm(2751) : see declaration of 'std::sort'
Vsaka pomoč je dobrodošla ;)
Vnaprej hvala,
nejck
torej imam sledeč problem...
Rad bi sortiral vektor CPoint-ov glede na x koordinate tocke. Preiskal sem ze google ter msdn, in vse kar mi je uspelo je:
bool CPointPrimerjaj(CPoint cpStart, CPoint cpEnd)
{
return cpStart.x < cpEnd.x;
}
void CRisanje::RisiKonveksnoLupino(CDC* pDC, vector< CPoint > &tocke, int sirina)
{
std::sort(tocke.begin(),tocke.end(),CPointPrimerjaj);
CString test;
test.Format("%f %f %f %f", tocke[0], tocke[1], tocke[2], tocke[3]);
pDC->TextOutA(10,10,test);
}
povsod sem našel podatek, da naj bi to delovalo, a nekako mi to ne uspe....
Compiler mi javi error in sicer:
1>risanje.cpp(58) : error C3867: 'CRisanje::CPointPrimerjaj': function call missing argument list; use '&CRisanje::CPointPrimerjaj' to create a pointer to member
1>risanje.cpp(58) : error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided
1> d:\program files\microsoft visual studio 8\vc\include\algorithm(2751) : see declaration of 'std::sort'
Vsaka pomoč je dobrodošla ;)
Vnaprej hvala,
nejck
- spremenilo: snow ()
Jean-Paul ::
Zmoti me to: error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided
Glede na dokumentacijo ( link) bi to moralo delati.
P.S.
V vsakem primeru pa bi bilo bolje, če bi v funkcijo za primerjanje nosil reference, recimo nekaj takega:
bool CPointPrimerjaj(const CPoint& cpStart, const CPoint& cpEnd)
Glede na dokumentacijo ( link) bi to moralo delati.
P.S.
V vsakem primeru pa bi bilo bolje, če bi v funkcijo za primerjanje nosil reference, recimo nekaj takega:
bool CPointPrimerjaj(const CPoint& cpStart, const CPoint& cpEnd)
nejck ::
sem poskusil tudi z referencami.....
cudno se mi zdi da ne deluje, ker po vsej dokumentaciji, ki sem jo pregledal bi moralo ;)
cudno se mi zdi da ne deluje, ker po vsej dokumentaciji, ki sem jo pregledal bi moralo ;)
Genetic ::
Namesto
std::sort(tocke.begin(),tocke.end(),CPointPrimerjaj);
daj
std::sort(tocke.begin(),tocke.end(),::CPointPrimerjaj);
ali pa
std::sort(tocke.begin(),tocke.end(),ime_namespacea::CPointPrimerjaj);
ce je CPointPrimerjaj definiran v kaksnem namespace-u
v metodi
void CRisanje::RisiKonveksnoLupino(...)
std::sort(tocke.begin(),tocke.end(),CPointPrimerjaj);
daj
std::sort(tocke.begin(),tocke.end(),::CPointPrimerjaj);
ali pa
std::sort(tocke.begin(),tocke.end(),ime_namespacea::CPointPrimerjaj);
ce je CPointPrimerjaj definiran v kaksnem namespace-u
v metodi
void CRisanje::RisiKonveksnoLupino(...)
nejck ::
CPointPrimerjaj je definiran v CRisanje in ravno tako ne deluje, tudi če ga poskusim klicat z CRisanje::CPointPrimerjaj ....
Jean-Paul ::
Aha, potem verjetno zajec tici v tem grmu. Mislim, da mora biti funkcija CPointPrimerjaj definirana globalno (ne sme biti member funkcija) oz. ce je member, mora biti definirana staticno. Za nalogo poskusi premisliti zakaj je temu tako.
Obstaja tudi druga moznost, ki pa zahteva, da ima doticni class definiran operator manjse. Potem lahko klices funkcijo std::sort samo s prvima dvema parametroma.
No, seveda pa se lahko tudi motim.
Obstaja tudi druga moznost, ki pa zahteva, da ima doticni class definiran operator manjse. Potem lahko klices funkcijo std::sort samo s prvima dvema parametroma.
No, seveda pa se lahko tudi motim.
nejck ::
Jean-Paul: hvala ;) to reši problem ;) nikjer nisem zasledil, da mora biti funkcija definirana globalno :)
zadeva sedaj deluje ;)
Hvala vsem za pomoc.
LP,
nejck
zadeva sedaj deluje ;)
Hvala vsem za pomoc.
LP,
nejck
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C#] Sort za string (slovenska abeceda)Oddelek: Programiranje | 972 (781) | mihies |
» | vector::iterator problemi, brisanje podatkov iz vektorjaOddelek: Programiranje | 1137 (988) | mn |
» | It means business (strani: 1 2 3 4 5 6 7 8 )Oddelek: Znanost in tehnologija | 28392 (14391) | Thomas |
» | [C++] preprosto risanjeOddelek: Programiranje | 1670 (1547) | popec |
» | Program v c++Oddelek: Programiranje | 2028 (1697) | Bela01 |