0

我已经实现了自己的 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”,这就是为什么本地声明不是我的选项.

4

1 回答 1

0

您必须为您的变量分配一个新对象writer,如下所示:

QString MyXmlWriter::writeToString() {
    QString result;
    writer = QXmlStreamWriter(&result);  // will not compile
    return result;
}

这段代码很危险。 result在 结束时被销毁writeToString(),因此writer包含无效数据,您不能再使用它。

此外,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;
}
于 2019-09-05T09:07:17.393 回答