expected unqualified-id before 'delete'

0

Mam taki oto kod:

#include <iostream>
#include <string>

using namespace std;

template<class T>
class TreeElem{
	private:
		T elem;
	public:
		TreeElem<T>* left;
		TreeElem<T>* right;
		T getElem(){return elem;}
		TreeElem(T elem){
			this->elem=elem;
			this->left=NULL;
			this->right=NULL;
		}
		~TreeElem(){}
};
/**klasa reprezentujaca drzewo*/
template<class T>
class Tree{
	public:
		/**korzen drzewa*/
		TreeElem<T>* root;
		/**glowny konstruktor klasy*/
		Tree(){root=NULL;}
		/**funkcja przeszukujaca w drzewo w poszukiwaniu elementu elem
		* @param elem element, ktorego poszukujemy
		* @return true, jesli szukany element jest w drzewie
		* @return false, jesli szukanego elementu nie ma w drzewie
		*/
		bool search(T elem){
			TreeElem<T>* temp=root;
			while(true){
				if(temp==NULL){return false;}
				if(elem==temp->getElem()){return true;}
				if(elem<temp->getElem()){temp=temp->left;}
				else{temp=temp->right;}
			}
		}
		/**funkcja wstawiajaca element elem do drzewa(jesli element ten jest juz w drzewie, to nic nie robi)
		* @param elem element do wstawienia
		*/
		void insert(T elem){
			root=insert(elem, root);
		}
		/**funkcja konwertujaca drzewo na String
		* @return drzewo wypisane w porzadku in order, kolejne elementy oddzielone tabulatorami
		*/
		void draw(){
			draw(root);
		}//linijka 54
		
		/**funkcja usuwajaca element elem z drzewa(jesli elementu nie ma w drzewie, to nic nie robi)
		* @param elem element do usuniecia
		*/
		void delete(T elem){//linijka 59
			TreeElem<T>* father=NULL;
			TreeElem<T>* temp=root;
			boolean side=true;		//true, gdy temp jest lewym synem; false, gdy temp jest prawym synem
			if(root==NULL){return;}
			if(root->getElem()==elem){
				if(root->right==null){
					temp=root->left;
					delete(root);
					root=temp;
				}else{
					temp=root->right;
					if(temp.left==NULL){
						temp.left=root->left;
						delete(root);
						root=temp;
					}else{
						while(temp->left!=null){
							father=temp;
							temp=temp->left;
						}
						father->left=temp->right;
						temp->left=root->left;
						temp->right=root->right;
						delete(root);
						root=temp;
					}
				}
				return;
			}
			while(true){
				if(temp==NULL){return;}
				if(elem==temp->getElem()){
					if(temp->right==NULL){
						if(side){
							father->left=temp->left;
							delete(temp);
						}
						else{
							father.right=temp.left;
							delete(temp);
						}
					}
					else{
						TreeElem<T>* temp2=temp->right;
						TreeElem<T>* father2=temp;
						while(temp2->left!=NULL){
							father2=temp2;
							temp2=temp2->left;
						}
						father2->left=temp2->right;
						temp2->left=temp->left;
						temp2->right=temp->right;
						delete(temp);
						if(side){father->left=temp2;}
						else{father->right=temp2;}
					}
				}
				father=temp;
				if(elem<temp->getElem()){temp=temp->left; side=true;}
				else{temp=temp->right; side=false;}
			}
		}
	private:
		TreeElem<T>* insert(T elem, TreeElem<T>* root){
			if(root==NULL){return new TreeElem<T>(elem);}
			else{
				if(elem<root->getElem()){root->left=insert(elem, root->left);}
				else if(elem>root->getElem()){root->right=insert(elem, root->right);}
				return root;
			}
		}
		void draw(TreeElem<T>* root){
			if(root!=NULL)
			{
				draw((*root).left);
				cout<<(*root).getElem();
				cout<<"\t";
				draw((*root).right);
			}
		}
};

int main(int argc, char** argv){
	Tree<string> tree;
	tree.insert("kot");
	tree.insert("ma");
	tree.insert("ala");
	tree.insert("gornik");
	tree.insert("spada");
	tree.insert("zabrze");
	tree.draw();
	cout<<endl;
	return 0;
}//linijka 153
 

I dostaję następujące błędy przy kompilacji:

Jak znam życie, to pewnie jakiś głupi błąd wynikły z niedopatrzenia, ale sprawdzałem wszystkie nawiasy i moim zdaniem są w porządku. Najciekawszy jest fakt, że po okomentowaniu funkcji delete nie ma żadnych błędów kompilacji

5

nie mozesz miec funkcji o nazwie delete. delete jest operatorem
http://en.cppreference.com/w/cpp/memory/new/operator_delete

5

delete jest słowem kluczowym i nie możesz go użyć jako nazwy.

0

Dzięki wielkie. Tak to jest, jak człowiek po kilku latach siada z powrotem do języka :p

1 użytkowników online, w tym zalogowanych: 0, gości: 1