我試圖從矢量工具中刪除一個對象。爲什麼這段代碼壞了
我的代碼是:從Wezel.h
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;
}
代碼:
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
和編譯器顯示的錯誤是:
錯誤:不對應的 '操作員!'在 '!(& __first .__ gnu_cxx :: __ normal_iterator < _Iterator,_container> ::運算**,性病::矢量>>()) - >韋策爾:: ==操作符((* & __value))' |
請幫忙。
請更清楚:你想做什麼以及整個編譯器輸出是什麼? 此外,代碼的最後一部分丟失。 – bznein
我的英語不是很好。我基本上試圖擦除和矢量對象。 只看整個程序會更容易 http://speedy.sh/ZGDXX/graf.rar – Consigliere
http://stackoverflow.com/help/mcve –