К моему удивлению, я не смог найти хороший дубликат для заданного вопроса (несмотря на другие проблемы).
Ошибка, которую вы видите, происходит из следующего фрагмента кода:
&((*root)->getLeft())
И может быть значительно упрощен до следующего очень маленького кусочка:
int bar();
void foo(int*);
void baz() {
foo(&bar());
}
(также можно увидеть на https://gcc.godbolt.org/z/PuwtuT)
Это приводит к точно такой же ошибке компилятора. И причина этого в том, что C ++ запрещает брать адрес prvalue, и хотя обсуждение rvalue / lvalue очень сложно, легко вспомнить, что когда функция возвращает значение, это всегда prvalue. (Если функция возвращает ссылку, это другая история). Однако вы можете передать rvalue по константной или rvalue ссылке.
Я не могу сразу предложить решение вашей проблемы, потому что мне не очень понятно, какова ваша конечная цель. Но я надеюсь, что этот ответ, по крайней мере, направит ваши мысли и позволит вам задать другой вопрос.