我已经实现了自己的xml编写器,以将xml生成为QString。
我创建了一个类“ MyXmlWriter”,其私有成员变量为QXmlStreamWriter,并尝试在公共方法writeToString()中对其进行初始化
在声明头文件中:
class MyXmlWriter {
public:
MyXmlWriter();
~MyXmlWriter();
QString writeToString();
private:
QXmlStreamWriter writer;
void writePart();
}
在cpp文件中:
void MyXmlWriter::writePart() {
// i want to use the QXmlStreamWriter instance hier
}
QString MyXmlWriter::writeToString(){
QString result;
writer(&result); // at this became the error: no match for call to '(QXmlStreamWriter) (QString*)'
xmlWriter.setAutoFormatting(true);
// private method called
writePart();
return result;
}
此错误出现在构建中: 错误:对(QXmlStreamWriter)(QString )writer(&result)的调用不匹配; *
如果在本地方法 writeToString()中声明了 QXmlStreamWriter写入,那么我将无法通过私有方法 writePart()访问此写入器。 我想在其他方法中使用成员变量“ writer”,这就是为什么我不能选择使用本地声明的原因。
答案 0 :(得分:0)
您必须为变量writer
分配一个新对象,如下所示:
QString MyXmlWriter::writeToString() {
QString result;
writer = QXmlStreamWriter(&result); // will not compile
return result;
}
此代码很危险。 result
在writeToString()
的末尾被破坏,因此writer
包含无效数据,您将无法再使用它。 / p>
此外,QXmlStreamWriter
无法复制,因此可能根本无法编译。最好将QXmlStreamWriter
传递给您的方法,如下所示:
class MyXmlWriter {
public:
MyXmlWriter();
~MyXmlWriter();
QString writeToString();
private:
void writePart(QXmlStreamWriter &writer);
}
和
QString MyXmlWriter::writeToString() {
QString result;
QXmlStreamWriter writer(&result);
writePart(writer);
writePart(writer);
return result;
}