2015-11-10 3 views
-6

Im пытается стереть объект с векторного cointener.почему этот код не работает

Мой код не является:

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 

и ошибки показано компилятором:

ошибка: не подходит для 'оператора! in '! (& __first .__ gnu_cxx :: __ normal_iterator < _Iterator, _Container> :: operator **, std :: vector>>()) -> Wezel :: operator == ((* & __value))' |

Пожалуйста, помогите.

+1

Пожалуйста, будьте яснее: что вы пытаетесь сделать и что такое весь вывод компилятора? Также отсутствует последняя часть кода. – bznein

+0

мой английский не очень хорош. Im в основном пытается стереть объект и объект из вектора. просто посмотрите, что все будет проще http://speedy.sh/ZGDXX/graf.rar – Consigliere

+3

http://stackoverflow.com/help/mcve –

ответ

1

В нем говорится, что Wezel<int>::operator== не существует. И std::remove нуждается в нем, чтобы найти, что удалить.

+0

поэтому мне нужно перегрузить == operator? – Consigliere

+1

@notkink Из документации 'std :: remove': _ Функция использует оператор == для сравнения отдельных элементов_. Так что да, вам нужно перегрузить 'operator ==' – BlackDwarf

+0

Абсолютно. 'template Wezel :: operator == (const Wezel & other) {/ * ... * /}' – YSC

Смежные вопросы