На мой взгляд просто - вы вызываете конструктор объекта и передаёте ему ещё не созданный объект.
Т.е. попытка обратиться к членам класса до его создания.
Давайте подумаем. В конструкции Type x=y выполняется копирующая инициализация объекта x значением y. Т.е. сначала создается объект x, а потом ему присваивается значение у. Таким образом, в приведенном примере производится инициализация объекта значением самого объекта. Не наказуемо.
Для выполнения этой операции используется копирующий конструктор, он объявляется как Type(const Type&). В нашем случае, это QString(const QString & other). Может, туда посмотреть?
Кстати, C++Builder это делает без ругани.