为什么这段代码被打破了

时间:2015-11-10 09:57:58

标签: c++

我试图从矢量合作者中删除一个对象。

我的代码是:

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; |

请帮忙。

1 个答案:

答案 0 :(得分:1)

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