PDA

View Full Version : [C++] STL sort - array di oggetti


dierre
12-01-2007, 18:29
Allora ecco cosa ho fatto:


//card.h

#ifndef CARD_H
#define CARD_H
using namespace std;
class Card {
private:
int suit;
int val;
int taken;
public:
Card();
int getSuit()const;
int getVal()const;
...
bool operator<(const Card&);
};
#endif


//card.cpp

bool Card::operator<(const Card& a) {
return getVal() < a.getVal();
}

dunque...in un altro file:

#include <algorithm>

...

void Combinator::Comb5(Card i[]){

...

case 5:
sort(i,i+4);
break;
}
}

Ma purtroppo da una sfilza di errori:


C:/Programmi/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/bits/stl_algo.h: In function `const _Tp& std::__median(const _Tp&, const _Tp&, const _Tp&) [with _Tp = Card]':
C:/Programmi/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/bits/stl_algo.h:2482: instantiated from `void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size) [with _RandomAccessIterator = Card*, _Size = int]'
C:/Programmi/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/bits/stl_algo.h:2553: instantiated from `void std::sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = Card*]'
combinator.cpp:56: instantiated from here
C:/Programmi/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/bits/stl_algo.h:90: error: passing `const Card' as `this' argument of `bool Card::operator<(const Card&)' discards qualifiers
C:/Programmi/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/bits/stl_algo.h:91: error: passing `const Card' as `this' argument of `bool Card::operator<(const Card&)' discards qualifiers
C:/Programmi/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/bits/stl_algo.h:93: error: passing `const Card' as `this' argument of `bool Card::operator<(const Card&)' discards qualifiers
C:/Programmi/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/bits/stl_algo.h:97: error: passing `const Card' as `this' argument of `bool Card::operator<(const Card&)' discards qualifiers
C:/Programmi/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/bits/stl_algo.h:99: error: passing `const Card' as `this' argument of `bool Card::operator<(const Card&)' discards qualifiers

Dato che ho provato a fare una cosa tipo if(i[0]<i[1]) e non da errori suppongo di sbagliare ad usare il sorting. Credo ci sia qualche problema nell'uso dei const...però non riesco a capire bene che errore faccio.

kk3z
12-01-2007, 20:03
Prova a dichiarare anche l'operatore < come const:
bool operator<(const Card&) const;

dierre
12-01-2007, 20:38
ok... :asd:

ora spiegami il ragionamento :asd:

reptile9985
12-01-2007, 20:49
con oggetti costanti non puoi invocare metodi non costanti... quindi è buona norma dichiarare "const" metodi che non recano modifiche all'oggetto di invocazione altrimenti ti precludi la possibilità di invocarli con oggetti costanti ;)

dierre
12-01-2007, 20:50
denghiu :fagiano: