Я создаю двоичную программу дерева, и я хотел бы перегрузить несколько операторов. Я попытался перегрузить оператор +, так что, когда я пишу что-то вроде myTree + 5
, он добавит 5 в качестве узла на дереве.Ошибка сегментации при перегрузке оператора
Это мой код:
BST myTree;
void operator+(BST left, int right) {
myTree.addLeaf(right);
}
int main() {
vector<int> treeKeyList;
srand((unsigned)time(NULL));
int before = rand() % 20 + 1;
for (int i = 0; i < before; i++) {
int after = rand() % 20 + 1;
treeKeyList.push_back(after);
cout << treeKeyList[i] << " ";
}
cout << endl;
for (int i = 0; i < treeKeyList.size(); i++) {
myTree + treeKeyList[i];
}
}
На данный момент, кажется, прекрасно работать через одну петлю, однако он выходит из строя, когда он пытается добавить второе значение с ошибкой ошибки сегментации. Я думаю, что проблема должна быть в коде, который я показал, так как раньше я добавил, что перегрузка работала нормально. Если бы я сделал это, то:
for (int i = 0; i < treeKeyList.size(); i++) {
myTree.addLeaf(treeKeyList[i]);
}
Работает абсолютно нормально. Есть идеи?
1) Ваша перегрузка не является интуитивной, потому что оператор «+» обычно не мутирует, это левая сторона. 2) Даже если вы считаете, что он изменяет левую сторону - он фактически копирует его при передаче функции и мутирует копию, поэтому он, вероятно, не действует так, как вы планировали, – Predelnik
[This] (http: // stackoverflow .com/q/4421706/3425536). – emlai
Ваш оператор + принимает свой левый аргумент по значению, мутирует его и затем отбрасывает. Вы намеревались добавить узел во временную копию своего дерева, к которой вы никогда не сможете получить доступ? – Useless