Mam utworzoną liste za pomocą kontenera <list> o nazwie Lista_zadan, która się składa z klas o nazwie Zadania. Chciałbym usunąć z niej element za pomocą metody Lista_zadan.remove(Obiekt klasy Z).
int main(void){
list<Zadanie> Lista_zadan;
Zadanie Z;
...
Lista_zadan.remove(Z);
...
}
Zawartość plików Zadania.hh i Zadania.cpp
#ifndef ZADANIE_HH
#define ZADANIE_HH
#include <iostream>
using namespace std;
class Zadanie{
public:
Zadanie();
~Zadanie(){};
float r() const { return parametry[0]; }
float &r() { return parametry[0]; }
float p() const { return parametry[1]; }
float &p() { return parametry[1]; }
float q() const {return parametry[2];}
float &q() { return parametry[2]; }
friend ostream &operator << (ostream &o, Zadanie &Z);
friend istream &operator >> (istream &i, Zadanie &Z);
bool operator == (Zadanie &A);
private:
float parametry[3];
//parametry[0] - parametr r
//parametry[1] - parametr p
//parametry[2] - parametr q
};
#endif
#include <iostream>
#include "Zadanie.hh"
using namespace std;
Zadanie::Zadanie(){
parametry[0]=0;
parametry[1]=0;
parametry[2]=0;
}
ostream &operator << (ostream &o, Zadanie &Z){
o << Z.r() <<" "<< Z.p()<<" "<< Z.q()<<endl;
return o;
}
istream &operator >> (istream &i, Zadanie &Z){
i >> Z.r() >> Z.p()>> Z.q();
return i;
}
bool Zadanie::operator == (Zadanie &A){
if( ( A.r() == this->r() )
|| ( A.p() == this->p() )
|| ( A.q() == this->q() ) )
return true;
else return false;
}
Aby wykorzystać tą metode trzeba zdefiniować przeciążenie operatora ==. Jednak nie potrafie sobie z tym poradzić i przy kompilacji pojawiają się błędy:
C:\Dev-Cpp\include\c++\3.4.2\bits\list.tcc In member function `void std::list<_Tp, _Alloc>::remove(const _Tp&) [with _Tp = Zadanie, _Alloc = std::allocator<Zadanie>]':
17 C:\Dev-Cpp\main.cpp instantiated from here
181 C:\Dev-Cpp\include\c++\3.4.2\bits\list.tcc no match for 'operator==' in '(&__first)->std::_List_iterator<_Tp>::operator* [with _Tp = Zadanie]() == __value'
note C:\Dev-Cpp\Zadanie.hh:22 candidates are: bool Zadanie::operator==(Zadanie&)
C:\Dev-Cpp\Makefile.win [Build Error] [main.o] Error 1