我试图从矢量合作者中删除一个对象。
我的代码是:
vector<Wezel <int> > wektor;
int main()
{
Wezel<int> parent = Wezel<int>(true,"p1", 1);
Wezel<int> child1 = Wezel<int>(true,"ch1", 2);
Wezel<int> child2 = Wezel<int>(true,"ch2", 3);
Wezel<int> child3 = Wezel<int>(true,"ch3", 4);
Wezel<int> child4 = Wezel<int>(true,"ch4", 5);
parent.addWezel(&child1);
child1.addWezel(&child2);
child3.addWezel(&parent);
child4.addWezel(&child1);
wektor.push_back(parent);
wektor.push_back(child1);
wektor.push_back(child2);
wektor.push_back(child3);
wektor.push_back(child4);
child4.substractWezel(&child1){
tablica->erase(remove(tablica->begin(), tablica->end(), *child), tablica- >end());
}
return 0;
}
来自Wezel.h的代码:
template <class T>
class Wezel
{
public:
Wezel<T>& operator=(const Wezel<T>& obj);
Wezel<T> operator+(const Wezel<T>& obj);
Wezel<T>& operator==(const Wezel<T>& obj);
// Wezel<T> operator!();
Wezel(bool skierowany, string nazwa, T wartosc)
{
this->tablica = new vector<Wezel<T> >[4];
this->wartosc = wartosc;
this->skierowany = skierowany;
this->nazwa = nazwa;
}
Wezel(const Wezel &wezel){
this->tablica = wezel.tablica;
this->wartosc = wezel.wartosc;
this->skierowany = wezel.skierowany;
this->nazwa = wezel.nazwa;
}
~Wezel<T>(){
}
T getWartosc(){
return wartosc;
}
void setWartosc(T wartosc){
this->wartosc = wartosc;
}
vector<Wezel<T> > getTablica(){
return *tablica;
}
void setTablica(vector<Wezel<T> > *tablica){
this->tablica = tablica;
}
void addWezel(Wezel<T> *child){
if(getTablicaSize() == getTablicaMaxSize()){
cout << "tablica pelna, nie mozna dodac wezla" << endl;
return;
}
tablica->push_back(*child);
if(!skierowany){
if(child->getTablicaSize() == child->getTablicaMaxSize()){
cout << "tablica pelna, nie mozna dodac wezla" << endl;
return;
}
child->getTablica().push_back(*this);
}
}
void substractWezel(Wezel *child){
tablica->erase(tablica->begin()+1, *child);
tablica->erase(remove(tablica->begin(), tablica->end(), *child), tablica->end());
string getNazwa(){
return this->nazwa;
}
protected:
private:
vector<Wezel<T> > *tablica = new vector<Wezel<T> >[4];
T wartosc;
bool skierowany;
string nazwa;
int getTablicaMaxSize(){
return this->tablica->max_size();
}
int getTablicaSize(){
return this->tablica->size();
}
};
template <typename T>
ostream& operator << (ostream& os, const Wezel<T>& obj)
{
return os << obj;
}
template <typename T>
Wezel<T> Wezel<T>::operator + (const Wezel<T>& obj)
{
Wezel<T> tmp_obj = *this;
tmp_obj.wartosc = tmp_obj.wartosc + obj.wartosc;
tmp_obj.nazwa = tmp_obj.nazwa + obj.nazwa;
return tmp_obj;
}
template <class T>
Wezel<T>& Wezel<T>::operator = (const Wezel<T> & obj)
{
wartosc = obj.wartosc;
nazwa = obj.nazwa;
tablica = obj.tablica;
skierowany = obj.skierowany;
return *this;
}
template<class T>
Wezel<T>& Wezel<T>::operator==(const Wezel<T>& obj) { /* ... */ }
#endif // WEZEL_H
并且编译器中显示的错误是:
错误:&#39;运营商不匹配!&#39; in&#39;!(&amp; __first .__ gnu_cxx :: __ normal_iterator&lt; _Iterator,_Container&gt; :: operator **,std :: vector&gt;&gt;()) - &gt; Wezel :: operator ==((*&amp; ; __value))&#39; |
请帮忙。
答案 0 :(得分:1)
它说Wezel<int>::operator==
不存在。 std::remove
需要它来找到要删除的内容。