为什么这个代码被破坏了

why this code is broken

本文关键字:坏了 代码 为什么      更新时间:2023-10-16

我正试图从向量生成器中删除一个对象。

我的代码是:

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

编译器中显示的错误为:

错误:"operator!"不匹配在!(&__first.__gnu_cxx::__normal_iterator<_iterator,_Container>:运算符**,std::vector>>())->Wezel::运算符==((*&__值))'|

请帮忙。

它表示Wezel<int>::operator==不存在。std::remove需要它来找到要删除的内容。