QList作为函数参数 - 链接错误 - LNK2019

时间:2013-06-30 10:16:50

标签: c++ qt lnk2019 qlist

我有QList作为函数参数的问题,如果你能帮助我,我会很高兴。

我有这个代码,例如:

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

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

SpinBoxList_Enable(&controlBoardSpinBoxList);

controlBoardSpinBoxListQList<QWidget *>)的变量。

函数ToggleBoards_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)

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

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

然后在不使用address-of运算符的情况下调用它:

SpinBoxList_Enable(controlBoardSpinBoxList);

答案 1 :(得分:0)

Qt中的容器被引用计数并隐式共享以供阅读。你不需要传递一个QList作为指针,你甚至不需要将它作为参考传递(如Joachim所建议的那样),即使这是通常和GOOD实践的容器(特别是STL,否则被深深复制。)

您可以传递实际的QList,只要您只读取它就不会被复制,如果您尝试写入操作,它将创建一个副本并写入它。详细了解here