1

我对 QList 作为函数参数有疑问,如果您能帮助我,我会很高兴。

例如,我有以下代码:

void SpinBoxList_Enable(QList<QWidget *> *spinBoxList)
{
    foreach(QWidget* mWidget,*spinBoxList)
        mWidget->setEnabled(false);
}

在实现文件中,我使用QList<QWidget *>变量作为指针:

SpinBoxList_Enable(&controlBoardSpinBoxList);

(controlBoardSpinBoxList是 的一个变量QList<QWidget *>)。

FunctionToggleBoards_Slot(bool)是一个使用的插槽。编译时,我收到以下错误消息:

1>cmosaixserialnumber.obj : error LNK2019: unresolved external symbol "private: void __cdecl CMosaixSerialNumber::SpinBoxList_Disable(class QList<class QWidget *> *)" (?SpinBoxList_Disable@CMosaixSerialNumber@@AEAAXPEAV?$QList@PEAVQWidget@@@@@Z) referenced in function "public: void __cdecl CMosaixSerialNumber::ToggleBoards_Slot(bool)" (?ToggleBoards_Slot@CMosaixSerialNumber@@QEAAX_N@Z)
1>cmosaixserialnumber.obj : error LNK2019: unresolved external symbol "private: void __cdecl CMosaixSerialNumber::SpinBoxList_Enable(class QList<class QWidget *> *)" (?SpinBoxList_Enable@CMosaixSerialNumber@@AEAAXPEAV?$QList@PEAVQWidget@@@@@Z) referenced in function "private: void __cdecl CMosaixSerialNumber::on_ControlBoardCheckBox_StateChanged(int)" (?on_ControlBoardCheckBox_StateChanged@CMosaixSerialNumber@@AEAAXH@Z)

我怎样才能解决这个问题?

4

2 回答 2

1

您使用指针调用函数,但函数参数不是指针。我建议您将参数更改为引用(以避免复制):

void SpinBoxList_Enable(QList& spinBoxList) { ... }

然后在不使用地址运算符的情况下调用它:

SpinBoxList_Enable(controlBoardSpinBoxList);
于 2013-06-30T10:19:27.527 回答
0

Qt 中的容器被引用计数并隐式共享以供阅读。您不需要将 aQList作为指针传递,甚至不需要将其作为引用传递(正如 Joachim 建议的那样),即使这是容器的常用且良好的做法(尤其是 STL,否则会被深度复制)。

您可以传递实际的 QList 并且只要您只从中读取它就不会被复制,如果您尝试写入操作,它将创建一个副本并改为写入它。在此处阅读更多信息。

于 2013-06-30T11:09:33.407 回答