LINUX.ORG.RU

Как сделать глубокую копию QDomNode в конструкторе копирования?

 , ,


0

1

Есть некий класс Record, в котором есть protected-свойство:

QDomElement setupDomElement;


В момент копирования надо создать глубокую копию этого свойства.

Я пишу так:

Record::Record(const Record &obj)
{
  ...
  setupDomElement=obj.setupDomElement.cloneNode();
  ...
}


И при компиляции получаю ошибку:

../mytetra/src/models/recordTable/Record.cpp: In copy constructor 'Record::Record(const Record&)':
../mytetra/src/models/recordTable/Record.cpp:42:18: error: no match for 'operator=' (operand types are 'QDomElement' and 'QDomNode')
   setupDomElement=obj.setupDomElement.cloneNode();
                  ^
../mytetra/src/models/recordTable/Record.cpp:42:18: note: candidate is:
In file included from /media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtXml/QDomElement:1:0,
                 from ../mytetra/src/models/recordTable/Record.cpp:3:
/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtXml/qdom.h:470:18: note: QDomElement& QDomElement::operator=(const QDomElement&)
     QDomElement& operator= (const QDomElement&);
                  ^
/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtXml/qdom.h:470:18: note:   no known conversion for argument 1 from 'QDomNode' to 'const QDomElement&'
Makefile:23058: recipe for target 'build/Record.o' failed
make: *** [build/Record.o] Error 1
22:03:31: Процесс «/usr/bin/make» завершился с кодом 2.


Насколько я понял, метод cloneNode() возвращающий QDomNode, не может примениться к obj.setupDomElement, так как obj имеет тип const QDomElement&.

Я попробовал сделать прототип конструктора копирования без const, но тогда не проходит компиляция в других местах, и я бы не хотел их трогать.

Вопрос. Как обойти сию проблему, и сделать глубокую копию QDomElement в конструкторе копирования?

★★★★★

setupDomElement=obj.setupDomElement не?

anonymous ()
setupDomElement=obj.setupDomElement.cloneNode().toElement();
anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.