为什么这个代码被破坏了
why this code is broken
我正试图从向量生成器中删除一个对象。
我的代码是:
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
需要它来找到要删除的内容。
相关文章:
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- wxWidgets mac剪贴板在3.1.3上坏了?
- 计时器坏了或者其他什么的
- 我已经编写了C++代码将 boost::optional 视为一个范围,但它无法编译
- boost::p rocess::env 在 ubuntu 19.04 上坏了?
- 使用额外的变量使计算更容易理解 - (多少)我减慢了代码的速度?
- 课堂上的一行,使整个应用程序坏了. 0xC000005错误
- Visual Studio 2017问题编译了C 代码,而该代码则在Linux中编译
- 是什么导致了代码中出现"error LNK2005: already defined in .obj"错误?
- 我不知道如何使用 boost,虽然我的老师确实提供了代码,但我遇到了一个错误
- SFML sf::Text::setFillColor 坏了,还是我做错了什么
- G 越野车吗?还有clang ?G 使用-O0和-O1选项编译了代码,而对于-O0和-O2,Clang
- 我用VS12编写了代码,但它无法在Linux上编译
- 开关内的案例不停地循环,即使我坏了
- C++编译器似乎跳过了代码行
- 我的C++代码给出了代码中没有的错误.虫子是什么
- 2D数组中指向元素的指针减慢了代码的速度
- 溪水变坏了
- 确定eigen是否为SSE指令优化了代码
- 条件评估是否优化?这个代码坏了吗