Проблема с перегрузкой оператора минус
Моя программа содержит класс дерева, для которого я хочу перегрузить "-" по следующей логике: дерево - число, то есть от каждого элемента дерева отнимается это число, в первый раз, при вызове перегрузки всё работает верно и корректно, но если вызвать второй раз эту перегрузку, то программа зависает и закрывается с длинной ошибкой
Вызов перегрузки в main:
cout << tree-numb;
Сама перегрузка:
template<class T>
void BinTree<T>::forminus(node* node, double numb) const
{
if (node != nullptr)
{
node->val = node->val-numb;
forminus(node->right, numb);
forminus(node->left, numb);
}
}
template<class T>
BinTree<T> BinTree<T>::operator-(const double& numb) const
{
forminus(tr, numb);
BinTree tmp(*this);
return tmp;
}
Проблема сохраняется даже если я убираю функцию "forminus", так что дело не в ней, что можно сделать? Обыскал все в интернете что мог, решения не нашёл
Правка:
template<class T>
class BinTree
{
private:
struct node
{
T val;
node* left;
node* right;
};
node* tr;
public:
BinTree()
{
tr = nullptr;
}
BinTree(T v)
{
tr = new node;
tr->val = v;
tr->left = NULL;
tr->right = NULL;
}
BinTree(const BinTree& other)
{
T* arr = new T[getSize(other.tr)];
getArr(other.tr, arr, 0);
for (int i = 0; i < getSize(other.tr); i++)
{
this->insert(arr[i]);
}
delete[] arr;
}
В main перегрузка вызывается церез циклическое меню swtich-case:
case 8:
{
cout << endl << "Vvedite chislo: "; cin >> numb;
cout << tree-numb;
}break;
Первый вывод на экран корректен, от каждого элемента дерева действительно отнялось введённое число, если же еще раз зайти в этот кейс и вызвать эту перегрузку, программа закрывается и выдает следующую ошибку:
Process finished with exit code -1,073,741,819.
Функция getArr создаёт массив элементов дерева, и по этому массиву создается идентичное дерево
template<class T>
int BinTree<T>::getArr(node* node, T*& array, int i)
{
if (node == NULL) return i;
array[i] = node->val;
i++;
if(node->left != NULL) i = getArr(node->left, array, i);
if(node->right != NULL) i = getArr(node->right, array, i);
return i;
}