vector sort met gedefinieerde operator

Status
Niet open voor verdere reacties.

retoke

Gebruiker
Lid geworden
17 aug 2007
Berichten
16
Ik heb een vector die objecten van het type Punt bevatten, Punt is een klasse die als instantie variabelen x en y hebben. Nu steek ik in mijn vector enkele van deze Punt objecten en de bedoeling is dat ik volgens een gedefinieerde operator deze vector ga sorteren. Ik heb al veel dingen opgezocht en ben tot de volgende code gekomen maar ik krijg steeds compiling errors.

Heb al veel geprobeert, maar niets hielp, wie kan er mij zeggen wat er eigenlijk scheelt?

Code:
#include <iostream>
#include <cmath>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>

using namespace std;

class Punt 
{
      private:
              int x;
              int y;
      public:
             Punt(int a, int b)
             {
                      this->x = a;
                      this->y = b;
             }
             Punt()
             {
             }
             
             int getX(){
                 return this->x;
                 }
                 
             int getY(){
                 return this->y;
                 }
                 
        bool operator==(const Punt &b) const
        {    bool temp = false;
             if((x == b.getX()) && (y == b.getY()))
             {
                         temp = true;
             }
             
              return temp;
        }
        
        bool operator<(const Punt &b) const
        {
             bool temp = false;
             if((x == b.getX()) && (y < b.getY()))
             {
                         temp = true;
             }
             return temp;
        }
        
             
};

int main(){
    
    int x;
    int y;
    cout <<"Geef X coordinaat: "<<endl;
    cin >> x;
    cout <<"Geef Y coordinaat: "<<endl;
    cin >> y;
    
    vector<Punt> punten;
    
    while (!cin.fail()){
          Punt temp(x,y);
          punten.push_back(temp);
                            
          cout <<"Geef X coordinaat: "<<endl;
          cin >> x;
          cout <<"Geef Y coordinaat: "<<endl;
          cin >> y;
          }
    
    
    sort(punten.begin(),punten.end());
    
}

Dit zijn de errors die ik krijg, ik gebruik DevC++:

J:\C++\les4oef2.cpp In member function `bool Punt:: operator==(const Punt&) const':
35 J:\C++\les4oef2.cpp passing `const Punt' as `this' argument of `int Punt::getX()' discards qualifiers
35 J:\C++\les4oef2.cpp passing `const Punt' as `this' argument of `int Punt::getY()' discards qualifiers
J:\C++\les4oef2.cpp In member function `bool Punt:: operator<(const Punt&) const':
46 J:\C++\les4oef2.cpp passing `const Punt' as `this' argument of `int Punt::getX()' discards qualifiers
46 J:\C++\les4oef2.cpp passing `const Punt' as `this' argument of `int Punt::getY()' discards qualifiers

Dank bij voorbaat
 
Laatst bewerkt:
zoiets dergelijks heb ik al geprobeerd en dan krijg ik een andere error, maar de bedoeling is dat ik gebruik maak van operator overloading, dus de < operator wordt geherdefinieerd voor Punt objecten, en dan maakt de sort functie gebruik van die operator ipv de gewone betekenis van "<"
Zo staat het in een C++ boek, maar ik krijg dus errors bij compilen en ik heb geen idee wat er mis is.
 
Je probeert een "niet const" functie te laten werken op een constant object. Dit mag niet in C++.

Het beste is denk ik als je van getX en getY een const functie maakt. Dit houdt in dat je aangeeft dat de functies het object niet kunnen veranderen.
Dit:
Code:
             int getX() {
                 return this->x;
                 }
                 
             int getY() {
                 return this->y;
                 }
wordt dan:
Code:
             int getX() const {
                 return this->x;
                 }
                 
             int getY() const {
                 return this->y;
                 }

zie ook op onderstaande website (is wel in het engels):
http://cprogramming.com/tutorial/const_correctness.html
Het aanroepen van getX en getY in de operator== functie is overigens niet nodig. Je kan de lidvariabelen direct benaderen:
if((x == b.getX()) && (y == b.getY()))
=>
if( x == b.x && y == b.y )
 
Laatst bewerkt:
Ah inderdaad, nu werkt het :D

Bedankt voor de hulp anders vrees ik dat ik nog lang had kunnen zoeken :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan