【问题标题】:What is the difference betwen these function calls that return pointers? [closed]这些返回指针的函数调用有什么区别? [关闭]
【发布时间】:2017-09-14 01:17:41
【问题描述】:

我正在使用 Qt 解析 XML 文件,使用 QTreeWidget 来显示 XML 的各个部分。我想维护指向每个部分“标题”的指针。

我定义了这些指针:

QTreeWidgetItem* groupExport,
                 groupDesign,
                 groupSheet,
                 groupTitleBlock,
                 groupComponents,
                 groupLibParts,
                 groupLibraries,
                 groupNets;

我有这些功能:

//////////////////////////////////////////////////////////////////////////////
/// treeAddRoot
///---------------------------------------------------------------------------
QTreeWidgetItem* window_Main::treeAddRoot(QString name) {
    QTreeWidgetItem *treeRoot = new QTreeWidgetItem(ui->treeSourceFile);
    ...
    return treeRoot;
}
QTreeWidgetItem* window_Main::treeAddRoot(QString name, QString description) {
    QTreeWidgetItem *treeRoot = new QTreeWidgetItem(ui->treeSourceFile);
    ...
    return treeRoot;
}

//////////////////////////////////////////////////////////////////////////////
/// treeAddGroup
///---------------------------------------------------------------------------
QTreeWidgetItem* window_Main::treeAddGroup(QTreeWidgetItem *treeParent, QString name) {
    QTreeWidgetItem *treeChildGroup = new QTreeWidgetItem(treeParent);
    ...
    return treeChildGroup;
}
QTreeWidgetItem* window_Main::treeAddGroup(QTreeWidgetItem *treeParent, QString name, QString description) {
    QTreeWidgetItem *treeChildGroup = new QTreeWidgetItem(treeParent);
    ...
    return treeChildGroup;
}

//////////////////////////////////////////////////////////////////////////////
/// treeAddChild
///---------------------------------------------------------------------------
void window_Main::treeAddChild(QTreeWidgetItem *treeParent, QString name) {
    QTreeWidgetItem *treeChild = new QTreeWidgetItem(treeParent);
    ...
    treeParent->addChild(treeChild);
}
void window_Main::treeAddChild(QTreeWidgetItem *treeParent, QString name, QString description) {
    QTreeWidgetItem *treeChild = new QTreeWidgetItem(treeParent);
    ...
}

这些是为解析时“临时”使用而定义的:

QString tempTag, tempValue;

对于解析代码,编译器似乎认为这样可以:

if (tempTag.contains("export")) {
   ...            
   groupExport = treeAddRoot(tempTag);
}

然而,几行之后,是这样的:

if (tempTag.contains("design")) {
    ...
    groupDesign = treeAddGroup(groupExport, tempTag);
}

编译器错误:

error: no match for ‘operator=’ (operand types are ‘QTreeWidgetItem’ and ‘QTreeWidgetItem*’)
groupDesign = treeAddGroup(groupExport, tempTag);
            ^

有人能帮我理解其中的区别吗?为什么编译一个可以,而另一个编译失败?

提前致谢。

【问题讨论】:

标签: c++ qt


【解决方案1】:

这样定义指针:

QTreeWidgetItem *groupExport,
                *groupDesign,
                *groupSheet,
                *groupTitleBlock,
                *groupComponents,
                *groupLibParts,
                *groupLibraries,
                *groupNets;

【讨论】:

  • 啊。我现在知道了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 2016-06-03
  • 1970-01-01
  • 2014-02-23
相关资源
最近更新 更多